{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Adaptive Linear Neuron -- Adaline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "An implementation of the ADAptive LInear NEuron, Adaline, for binary classification tasks."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> from mlxtend.classifier import Adaline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Overview"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "An illustration of the ADAptive LInear NEuron (Adaline) -- a single-layer artificial linear neuron with a threshold unit:\n",
    "    \n",
    "![](./Adaline_files/adaline_schematic.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The Adaline classifier is closely related to the Ordinary Least Squares (OLS) Linear Regression algorithm; in OLS regression we find the line (or hyperplane) that minimizes the vertical offsets. Or in other words, we define the best-fitting line as the line that minimizes the sum of squared errors (SSE) or mean squared error (MSE) between our target variable (y) and our predicted output over all samples $i$ in our dataset of size $n$.\n",
    "\n",
    "$$ SSE =  \\sum_i (\\text{target}^{(i)} - \\text{output}^{(i)})^2$$\n",
    "\n",
    "$$MSE = \\frac{1}{n} \\times SSE$$\n",
    "\n",
    "\n",
    "[`LinearRegression`](../regressor/LinearRegression.md) implements a linear regression model for performing ordinary least squares regression, and in Adaline, we add a threshold function $g(\\cdot)$ to convert the continuous outcome to a categorical class label:\n",
    "\n",
    "$$y = g({z}) =\n",
    "\\begin{cases}\n",
    "1 & \\text{if z $\\ge$ 0}\\\\\n",
    "-1 & \\text{otherwise}.\n",
    "\\end{cases}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "An Adaline model can be trained by one of the following three approaches:\n",
    "\n",
    "- Normal Equations\n",
    "- Gradient Descent\n",
    "- Stochastic Gradient Descent"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Normal Equations (closed-form solution)\n",
    "\n",
    "The closed-form solution should be preferred for \"smaller\" datasets where calculating (a \"costly\") matrix inverse is not a concern. For very large datasets, or datasets where the inverse of $[X^T X]$ may not exist (the matrix is non-invertible or singular, e.g., in case of perfect multicollinearity), the gradient descent or stochastic gradient descent approaches are to be preferred.\n",
    "\n",
    "The linear function (linear regression model) is defined as:\n",
    "\n",
    "$$z = w_0x_0 + w_1x_1 + ... + w_mx_m = \\sum_{j=0}^{m} w_j x_j = \\mathbf{w}^T\\mathbf{x}$$\n",
    "\n",
    "where $y$ is the response variable, $\\mathbf{x}$ is an $m$-dimensional sample vector, and $\\mathbf{w}$ is the weight vector (vector of coefficients). Note that $w_0$ represents the y-axis intercept of the model and therefore $x_0=1$.  \n",
    "\n",
    "Using the closed-form solution (normal equation), we compute the weights of the model as follows:\n",
    "\n",
    "$$ \\mathbf{w} = (\\mathbf{X}^T\\mathbf{X})^{-1}\\mathbf{X}^Ty$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Gradient Descent (GD)  and Stochastic Gradient Descent (SGD) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the current implementation, the Adaline model is learned via Gradient Descent or Stochastic Gradient Descent.\n",
    "\n",
    "See [Gradient Descent and Stochastic Gradient Descent](../general_concepts/gradient-optimization.md) and [Deriving the Gradient Descent Rule for Linear Regression and Adaline](../general_concepts/linear-gradient-derivative.md) for details."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Random shuffling is implemented as:\n",
    "\n",
    "- for one or more epochs\n",
    "    - randomly shuffle samples in the training set\n",
    "        - for training sample *i*\n",
    "            - compute gradients and perform weight updates"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### References\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- B. Widrow, M. E. Hoff, et al. [Adaptive switching circuits](http://www.rob.uni-luebeck.de/index.php?id=267). 1960."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 1 - Closed Form Solution"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAf8AAAFyCAYAAAD739O4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3XucHFWZ//HvM5PrJNxCINxjCJeAgiB33DiggoIG5bZr\nhAXBFREQFuQnIKsRdhUUAUUEZYGArkZBwyYBgSi5EJZw1QCiYyAEEwIhNzJMMiQzPX1+f5yapKen\nZ6Zr0tVV1fV5v179Srr6dJ2nqy9PnVNVz5hzTgAAIDvq4g4AAABUF8kfAICMIfkDAJAxJH8AADKG\n5A8AQMaQ/AEAyBiSPwAAGUPyBwAgY0j+AABkDMkfMrPRZpY3s7P68dwvBM/do2DZHDObXdkoa5+Z\nvW5m0+OOo1MQz91xx1FppT7vZvZtM8vHGRdQTST/GmJmFwQ/avOr2K0LbsXLEv9DambDzOwaM3vJ\nzNaZ2Soz+7OZ/dDMdipod4KZTapCSFWvtW1mR5nZJDPbusTD+UrGZN5ZZjbTzFaaWZuZvW1mj5rZ\nl8xsUKX66ofIP7NmtnOwrQ8ss/3Zwfe58/aemS0zs0fM7KtmNjzKeONiZhPN7JK446h1JP/a8nlJ\niyUdbmZ7xhjHcZI+EWP/fTKzAZLmSfqapMclXSrpO5KelzRR0j4FzU+U9K1qx1glR8u/tm1LPLav\npPMq0YmZDZH0sKR7JA2VdIOkL0m6XtJ7kn4S3OLyn5IaIu5jF0mTJB0U4jlO0n9IOlPS+ZJuCZb9\nUNJLZnZApYNMgM9LIvlHbEDcAaAyzGyM/A/5yZLukHSG/A9a1TnncnH0G9LJ8j/CE51zvyl8IBiB\nFo5CrZqBVVmPr805117Bfn4ov1N4sXPu1qLHbjazscHjPTKzekl1FY5LkuScy0tqq/R6i/T3c/SI\nc+5PBfe/Z2bHSHpI0jQz2885t3GLo0OmMPKvHWdIWiP/g/Db4H43ZraNmd1jZmvN7B0zm6wSoz4z\nO8DMJpvZomC68S0zu8vMRvQVSHDMf1bB/cZg2vJ0M7vazJYG6/xj8KNf/PwjgqnNtWa2Pljf0SG2\nRTn2lB9BPVn8gHOuzTm3LohlsqQLgv93Tr92FMTaYGY3mtkSM9tgZk1m9rVSHZrZmWb2dPCa1pjZ\nXDPrlvDM7MNBu/eC7f+vRY9vZ2Y/MLMXzazFzJrN7PelppOD6eG/FPT5rJl9LnhskqTvB01f73xt\nFpy/UeqYf/D5udnMFgevd6mZ3dvb58LMdpP0RUkPl0j8kiTn3CLn3E8LntN5XP4yM7vEzF6VtEHS\nfmY20MyuNbPngs/IOjN7PEiIxX2X+3kvecw/eM+eM7NWM1ttZlOC11PYZk7wXuxnZrODbf2Gmf2/\ngjaNkp6R/8zdU7CtQ59nE2yvOfI796PlZwUK49nXzH4bxPte8J5PKGozwPwhiIVBm1VmNs/MPlZi\nXfeZ2YpgGzSZ2X8VtdnFzO42s+XBZ+IvZnZOUZuyfgPMnyv0KUmd73/ezF7rzzZC7xj5147PS/qd\ncy5nZlMknW9mhzjnni9qN11+huB2SU3yI+B71f3Y7nGSxki6W9JySe+X9GVJ+0s6qo9YejpOfKWk\nDvkp320kXSHpfwrXZ2YflfR7Sc9J+rb8cdhzJM0ys39yzj3XR9/l+of8SOws+en+nvxUfrr24/I7\nVMWjtxmSGiXdKekF+cMdN5jZLs65TTsBQaKdJOn/JH1TfpR5hKRjJf2hYH17S7pf0l3yU+TnSpps\nZs855/4WtNlT0klBu8WSRsm/N3PMbH/n3PKgzy9J+pGk++RH3kMkHRj0+2tJU+UPb3xOfpp1dbD+\nlcG/Xd5HMxsm6Qn5wwF3SfqzpJFBLLvJ73yWcoL8QOOXPTzem3MlDZb0M0kbgz62DpZPkZ/l2kp+\n5+IRMzvcOfdiwfPL/bx3O3fFzK6WdK38tvpvSTtIuljSXDM72Dn3bsFzR8gf1pgatD9N0vVm9qJz\n7lFJf5M/vHJt8FrmBc/ttvMZwi8kfVfS8fLvh8zs/fLv0RuSrpO0XtI/S/pfMzvFOTcteO418t/H\nOyQ9K79ND5X0IUmPBes6MIhzYxDzPySNlfRp+UMRMrMdJT0t/72+RdIq+ff7LjPbyjl3S1HMff0G\n/FewfFdJ/y7/fVu3BdsIPXHOcUv5TdIh8kny2IJlSyTdVNTuM0G7ywqWmaS58l/IswqWDy7Rz78E\n7T5csOzsYNkeBctmS5pVcL8x6PcvkuoLln81eO7+Bcv+Lumhon4HS1okP/1ZqW02RP4HOS+fQO+W\n38nYoUTbH0vqKLG8c3teWbT8Pkk5SWOC+2OD+/f3EdPiYHscXbBspPwx8e8XLBtY4rl7BO2uLlj2\ngKQX++jza8XvX1E8dxfcvyZoe1LIbX1j8LwDipYPlLR9wW1EwWOjg237TuHygs/sgKJlW0t6S9J/\n9/PzPqnwPQ62Z7ukK4r62V9+x+3KgmWzg/V9vui1vSnpvhLf07OKt1EP263zu/WhXtq8I+m5gvt/\nlN8pK94+T0hqKrj/Z0nT++h/rqS1knbtpc2d8jsa2xYt/5X8jtrg4H6Y34AZkl4L8xnjFv7GtH9t\nOEN+dD6nYNlvJH3OzApHqifI/6Btml51/tv2YxWNaF3BMUQzG2xm28vv4Zv86KA/7nbOdRTcnxes\nb8+gn4PkR75TzGz7zpv8yO4xSR/pZ7/dOOc2SDpcftrbyf/Q3iXpLTO7xcwGlrGaE+ST+o+Llt8o\nP9I9Ibh/svzrvLaMdf7VObdpNOicWyW/Q7RnwbJNx7zNrC6Ycm8N2hW+N2sl7WZmh5bRbzlOkfSC\ncy7s5YidVxIUj+BOlJ9l6Ly9XuK5v3XOdZlRcF5O2nQFwXby52g8p66vv+zPewmnBm3uL/osrpD0\nivyMTaF1zrlfFfTTLj/NH/WJt+vkvx8KtsOx8jNC2xTFPVPS3ma2c/C8tZLeb2Z7lVqpmY2UNF7S\nXc65Zb30f4p8sq4v0d826v5b0etvAKqH5J9yZlYnPyKfLWlPMxsbHEN7RtJOkgqP4Y2W9JZzrrVo\nNX8vsd7tzOxHZrZcfkS5UtJr8olym36Gu7To/jvBv9sF/+4d/PtzdU0KKyT9m6RBZtZj32Y2qug2\npLdgnHMtzrkrnXN7Snqf/FRyk6QL5afm+zJa0pvOufVFy/9W8Ljkf9jyBct7s6TEsne0eRt1JrxL\nzWyh/JTsKvltdIC6vjffk08OzwTHdm+1LTt3Yqz8yC2sluDf4kvTnpA/nPJx+WRRyuulFpq/DO4F\n+fMAVsu//k+p6+sv+/Newl7yv4+vqvtncZykHYvav1FiHV3et4gM1+btu5d8Iv1PdY15pfwhNGlz\n3J1XeCwMzlf4vnW9cqAzGb/cU8dmtkOwjvNK9Nd5rkjxdurrNwBVwjH/9PuopJ3lj9tOLHrMyc8K\n/LEf671f0pHyI+MX5JNInaRH1f+dxo4elneOwjrX+7Wgz1J6O/73lvxrtuDfc+R3JPrknFsqfyLW\n/8rv5JyheC7v62sbSVLnseg75Y+9rpHfufiRCt4b51yTme0rf4z2k/KjtAvM7Brn3DURxN6TJvn4\nPyDppYL4VkuaJUlWdFJjgfeKF5jZmZImyx9f/758Qu6Q9A1VbgRZJ79NP6nS1/8Xfw7Led8qysx2\nld/ZeTVY1Pne/0D+e1rKq5LknJsXDBI+I3/OwBclXWpmX3bOlVvYqbO//5E/j6KUF4vuV307oTSS\nf/qdKelt+TPSi79Ap0o62czOD6bx/yHpo2bWUDQaGlf4JDPbVn6n4pvOue8ULC85RVhBi4J/W5xz\ns3ptWdrHi+73OGrpiXNurZktkj/BcdPiHpr/Q9LHzGxY0eh/v+Df14N/F8n/UO6v7j+G/XGq/DkV\nXa7BD963lYXLnHPvye/I3W++tsEDkq42s+ucc20KV8RnkXwCD+th+R/9M+RP0ttSp0pa5Jw7rXCh\nmRUfVinr896DRfLfp9edc6/21bhMlS7idFawzkeC+51nxbeX8/1xzq2VT9r3mlmD/BT8t+VH7Z3r\n6u39Xik/61Dfz+9rj6FVcF3oAdP+KRZMa58saYZz7gHn3NTCm6Rb5Y+3nhQ85ffyJyJ9pWAddfIn\n3RR+4Tr3zos/H5cq2i/m8/I/upcHZ5Z3ERyH7JFzblbR7e2e2prZgcGxyeLlo+WTdFPB4vXBY8VV\n8H4vvwN9UdHyS+VHi50/yv8rv92+VXQORn91qGhHz8xOlz9DunBZl8vvguPkfwue23lOQ+dOS6ki\nP8V+J+mDZvaZMMEGsyp3SzrBzC7soVmY36Juo0czO0Ldr0Ip9/NeylT597BkZcfibVumMNu6V8FV\nMf8hn6R/JUnOuZXy5/182QoqVBY8Z2TB/4s/G63yswKDg/ur5ItfnWtmu5eKwfnaCL+TdGpwlUGP\n/YW0Xv0/tIgyMfJPt8/In+zT0wlYT8nvnZ8hP/qbIX+p2fXmiwL9VX4qeKvCJznnWszscUlfN1/w\nZpn81OD7FOH0nHPOmdm/yf9ov2z+muxl8kntWEnN8q+5Eo6TdI35WvpPyU/jjpU/VDBIm4+RSn6n\nxCT92MwelT8r/Dfy23O2pO8E27PzUr8Jkm52zi0OXtciM/uO/I/1PDObKn+s/jBJy5xzV4eM/UFJ\n3zR/Df6T8sf6z9DmmZNOM4NzNv5PfnZof/nzGR4smKnofG3fNbNfy58gNz2YMSh2g/wlbPcH783z\n8mfpT5D0ZefcSyWe0+nf5T8/t5ivMzBDfrp+pKQPB+so55yIztd/SnCI5iH5qf4vy8/0FJ5XUNbn\nvRTn3Gtm9h/y22WM/A5cS9DXZ+UvfbupzHg7LZI/0e58M1snn+Seds693stzTNKJZraf/O/1KPlZ\nuePkr8Y4KZjB6XSh/Aj+JTP7b/mdg1HyO0a7Sjo4aPdXM5sj/x6ukf8sniZ/uV6ni4N1/cnM7gj6\nGyPpROdc53qulHSMpKeD/v4qf9njIUGc/dkBeF7SP5vZjfKXIa5zzj3Yj/WgN3FfbsCt/zdJ0+ST\n1pBe2twtf1LUdsH9beWvH39H/ks/Wf7a7+JLn3aWLxa0Omg3Rf5HpEP+cEBnu54u9Xus4H5j0OaU\nothGF/cbLD9QfmdlhfxZ7K8F/R9TwW03Wpuvu39LPhkvD7bpR4ra1slfJ79c/uz+wkvCGuSPsS4N\ntnOTpEt76PNs+TPSW+VP0psl6aMFj78maVqJ5xVvz0Hyx7rfCN7/ufJXLswqavdvwXM7t+NC+Wu/\nhxet/xvyJxq2F76XQTx3FbXdVv7cgiXyx+P/IX+VxHZlbPPOugp/kN8p3Si/UzIziHVQic9GT9vy\niiC+1mCbnhB8lheViPce9f15nyQpV6Kfzwbb993g9nLw+vcqen9eKPHcUvF8Wv68h43FMfTweeko\nuL0nvzP8iHySH9bD894X9L0s+Ewukf9cn1zQ5ipJ8+W/3+uC13WFCi7DC9rtp82/A+vlk/ukojYj\n5XcaXg/6Wxa8p+f25zdA/jv1i6DPDnHZXyQ3CzY2AADICI75AwCQMSR/AAAyJtLkb2bnm9kL5v/w\nSLOZPWlmn4yyTwAA0LtIj/mb2afkT9h4Rf5kny9I+n+SDnKb/0gJAACooqqf8GdmqyVd7pybXNWO\nAQCApCpe5x8U1/hn+cs45vfSlMsPAADon7JqsUSe/M3sA/LJfoh8kYyTnXNNvT8LAABEJfJp/6Ce\n+B7y5RpPk/Ql+SIqJXcApkyZ4qZM6V7+e+LEiZo4sfjv1gAAgAJljfzjOOb/B0mvOue+0kMTpv0B\nAOifspJ/HNf51yn44xEAAKD6Ij3mb2bflf9znkvk/5jGGfI1no+Psl8AANCzqE/421H+70XvLP8X\n2V6UdLyr7N9+BgAAISTxD/skLiAAAFIiscf8AQBAjEj+AABkDMkfAICMIfkDAJAxJH8AADKG5A8A\nQMZU7a/6lWvGjLgjAACkzYYNrVq3bo2cy8cdSr+Y1Wn48BEaMqRhi9YzYUJ57RKX/AEAKFc+n9eT\nT/5Wq1Yt1KBBcUezZdrapJEj99HRR5+murpoJ+ZJ/gCA1Fq48GmtX/+qjjvuGO266/tkls6j2c7l\ntWzZ63riice1cOHTGjfuqEj7I/kDAFIpn8+rqWmODjvs/frQh/4p7nC22KhRu2nt2tV69tk52mef\nIyId/adzFwkAkHkbNqxTXV1OY8bsG3coFTNmzL6qq8tpw4Z1kfZD8gcApFJr67uqrzc1NAyPO5SK\nGTp0mOrrTa2t70baD8kfAJBKzuVlptQe5y+lrq5eZor8qoXa2WIAAKAsJH8AADKG5A8AQMaQ/AEA\nqLDW1vU6//wTddBBDdp//wH6yEd20X33/TTusDYh+QMAUGFnnvlhzZ37qI466lidffZXVVdXp299\n6wI99NCv4g5NEskfAICKmjnzt3r55Rd02mlf0O23P6QrrrhZv/99k4YP30o33PD1uMOTRPIHAKCi\nfve7u2Rmuuyy6zcta2gYro9+9NN6661lWrjwLzFG51HeFwCAwN/+9me1tDR3W77VVttov/0OLmsd\nixcv1Lbbbqftttuhy/LDDz9G06b9Sk899Qfts88HKhJvf5H8AQCQT/wXnv0xDcq1dXusbcAg/eTe\nx8raAXj33bXaaqttui3fffexkqQ33/zHlge7hUj+AABIamlp1qBcm35QV6+x9fWbli/q6NDlubaS\nMwKl5HI5DRgwsNvyYcN8GeL33mutTMBbgOQPAECBsfX1OmBgUfLOd5T9/AEDBiiXa++2fP16/8d6\nhg5t2KL4KoET/gAAqKCtt9625CzB0qWLJEm77DK62iF1Q/IHAKCCxozZR2vXvqN33lnZZfnTT8+S\nJB155HFxhNUFyR8AgAKLOjr0Unv7ptuijvKn/CXp1FO/KOecbrxx8zX9ra3rNWfOw9p5511iP9Nf\n4pg/AACS/OV8bQMG6fJcW7dj/G0DBpU8g7+U448/Tfvvf6B+97ufa9Wqt/W+9+2jRx65X+vWtWjS\npFujCD00kj8AAJL22+9g/eTex7b4On9J+uUvn9Rll52up56ao8cfn6mRI3fUNdf8RJ/+9JmVDLnf\nSP4AAATCJPjeNDQM009/+vuKrCsKHPMHACBjSP4AAGQMyR8AgIwh+QMAkDEkfwAAMobkDwBAxpD8\nAQDIGJI/AAAZQ/IHACBjSP4AAGQMyR8AgIwh+QMAkDEkfwAAKmzt2tW65JJT9IlP7K0DDhisffc1\n3XzzlXGHtQnJHwCAClu27HU98sgDWrVquUaN2iXucLoh+QMAUGFjx+6vmTMX6vnnW3TVVTfHHU43\nkSZ/M7vKzJ4xs3fN7G0ze8DM9omyTwAA4jZkyFCNHr133GH0KOqR/3hJP5Z0hKSPSxooaaaZDY24\nXwAA+u2ZZ+Zo0qTzlM/n4w4lEgOiXLlz7sTC+2b2BUkrJB0i6Yko+wYAoD/y+by+970rtXjxCh18\n8L367GfPiTukiqv2Mf9tJTlJa6rcLwAAZXn44V9r8eKVamt7n+6++yc1OfqvWvI3M5P0Q0lPOOf+\nWq1+AQAoVz6f1113/UgdHYdq2LD/0tKlazV9+r1xh1Vx1Rz53yZpf0mfq2KfAACU7eGHf63XX1+l\nQYMu1MCBRyufP7ImR/+RHvPvZGa3SjpR0njn3Fu9tZ07d4rmzZvSbfn48RPV2DgxoggBAFlXOOof\nOvSfJElDhlygpUvP0vTptXXsP/LkHyT+z0hqdM4t6at9YyNJHgBQfZ2jfucOVGvrTZuWt7Vtr8mT\nf0LyL5eZ3SZpoqSTJK03s1HBQ83OuQ1R9g0AQBgdHTltv/1QOfeUpKe6PDZ06Hah13fttV/Ru+++\noxUr3pQkzZ79oJYte12SdNVVP9L224/q5dnRinrkf7782f1zipafI+nnEfcNAEDZTjrpLJ100lkV\nW9+0af+jdevWbbr/97+/rL///WVJ0he/eEXtJn/nHOWDAQCZ9PzzLXGH0COSMwAAGUPyBwAgY0j+\nABJv5co+LxQCEALJH0CivfDCY7rmmlP0wguPxR0KUDNI/gASK5/P68EHf6aVK6UHH7yj5qqsAXEh\n+QNIrBdfnKVXX31NW211iRYtWqSXXpodd0hATSD5A0ikfD6vhx66Qx0dR2rrrf9VHR1HMPpHF2Z1\nck7K5zviDqVi8vkOOedfW5RI/gASafOo/zxJ0vDh5zH6RxfDh49Qe3tey5fXzgmhy5cvUXt7XsOH\nj4i0n6r8YR8ACKNz1J/LHagBA3ZTR8caDRiwu9rbD9SDD96hAw44VnV1jF2ybsiQBo0cOU7z5j0u\nSdpppz1UV1cfc1T9k893aPnyJZo373GNHDlOQ4Y0RNofyR9A4rz55kK98cZrqq+XmpuP37S8vl56\n4w3/+G67jYsxQiTF0Uefpief/K0effQxDRxYJ7O4I+of56T29rxGjhyno48+LfL+zDkXeSdhzJih\nZAUEoOry+bwWLXpeGze+1+2xwYOHauzYQxj5o4sNG1q1bt0aOZfOc0LM6jR8+IgtHvFPmKCydn8Y\n+QNInLq6Ou2992Fxh4EUGTKkIfKp8lrCrjMAoCQqK9Yukj8AoBsqK9Y2kj8AoAsqK9Y+kj8AoAsq\nK9Y+kj8AYBMqK2YDyR8AsAmVFbOB5A8AkNR3ZUVG/7WD6/wBAJKorJglJH8AgCRpl1320WWX3d5j\nZcVddtknhqgQBZI/AEASlRWzhGP+AGpOU9P8uEPYhCp5SCKSP4CaMnXqDbr66hM1deoNcYdClTwk\nFskfQM3I5XKaNu02tbfvpGnTblMul4stFqrkIclI/gBqxrRpN6m5Oae6uovV3JzT9Ok3xxYLVfKQ\nZCR/ADUhl8tp+vTb5dwxGjjwK3KuMbbRP1XykHQkfwA1oXPUX19/kSSpvv6i2Eb/VMlD0pH8AaTe\n5lH/ETIbo3x+hcz2lHNHVH30T5U8pAHX+QNIvQULZqqlpUXSs8rlul6n3tKyXgsWzNShh55YlVio\nkoc0MOdc3DF0MWOGkhUQgMTL5XKaO/eXam19t9tjDQ1bq7HxDA0YUJ2xTj6f16JFz/dYJW/s2ENU\nV8ekK6IxYYKsnHYkfwAAakS5yZ/dTyDFoqwel6TKdGFjSdJ2ibJ91O9RkrYjKovkD6RUlNXjklSZ\nLmwsSdouUbaP+j1K0nZE5ZH8gRSKsnpckirThY0lSdslyvZRv0dJ2o6IBskfSKEoq8clqTJd2FiS\ntF2ibB/1e5Sk7YhokPyBlImyelySKtOFjSVJ2yXK9lG/R0najogOyR9ImSirxyWpMl3YWJK0XaJs\nH/V7lKTtiOiQ/IEUibJ6XJIq04WNJUnbJcr2Ub9HSdqOiBYV/oAUibJ6XJIq04WNJUnbJcr2Ub9H\nSdqOiBZFfoAUibJ6XJIq04WNJUnbJcr2Ub9HSdqO6B8q/AEAkDFU+AMSgCpm6dDUND/uEKoiSdUJ\nw+K7VFkkfyAiVDFLh6lTb9DVV5+oqVNviDuUSCWpOmFYfJcqj+QPRIAqZumQy+U0bdptam/fSdOm\n3aZcLhd3SJFIUnXCqGNHeUj+QASoYpYO06bdpObmnOrqLlZzc07Tp98cd0iRSFJ1wqhjR3kiTf5m\nNt7MppvZMjPLm9lJUfYHJAFVzNIhl8tp+vTb5dwxGjjwK3KusSZH/0mqThh17Chf1CP/YZIWSLpA\n4ix+ZANVzNKhc9RfX3+RJKm+/qKaHP0nqTph1LGjfJEmf+fcI865bznnpknlXX4ApBlVzNJh86j/\nCJmNUT6/QmZ7yrkjamr0n6TqhFHHjnCo8AdUEFXM0mHBgplqaWmR9KxyucO6PNbSsl4LFszUoYee\nGE9wFZSk6oRRx45wqlbkx8zykj7rnJveWzuK/CDNqGKWDrlcTnPn/lKtre92e6yhYWs1Np6hAQPS\nPzZKUnXCqGOHl7gKf+Um/8svn+LmzZvSbfn48RPV2DgxqvAAAEi9cpN/4nZtGxtJ8kAUmprma9y4\no8puP3/+AzrqqJMja58kK1cu0Q477FHxttVoH0aU60a6MGcCZEDYKna33nqerrvuTN1663mRtE+S\nMNXjqJKHWhH1df7DzOyDZnZQsGjP4P7uUfYLYLOwVeza2to0e/Z9kvbQ7Nn3qa2traLtkyRM9Tiq\n5KGWRD3yP1TSnyU9L3+d/42S/iTpmoj7BRAIW8XuZz+7UO3twyRdpPb2Bt1xx0UVbZ8kYarHUSUP\ntSTq6/znOufqnHP1Rbdzo+wXgBe2il1bW5vmzLlf0rEyu1DSsb2O5sO2T5Iw1eOokodawzF/oIaF\nrWJXOIr3eh/Nh22fJGGqx1ElD7WG5A/UqLBV7DaP4o+UNEbOvS1pT0lHlhzNh22fJGGqx1ElD7Uo\ncZf6AaiMsFXsZs2arPZ2J+kZ+dN1Nmtvd5o1a7I++ckv97t9koSpHkeVPNSiqhX5KRcV/oDKCFvF\nrq2tTfff/x2tX7+2W/thw7bV6adfrUGDBvW7fZKEqR5HlTykSeIq/JWL5A8AQP+Um/zZ5QMyYuXK\nJYlZf1PT/AgjCS/qbQMkDckfyICoq7uFWX/YaoNRo/IdsojkD9S4qKu7hVl/2GqDUaPyHbKK5A/U\nuKiru4VZf9hqg1Gj8h2yiuQP1LCoq7uFWX/YaoNRo/IdsozkD9SwqKu7hVl/2GqDUaPyHbKM5A/U\nqKiru4VZf9hqg1Gj8h2yjgp/QI2KurpbmPWHrTYYNSrfIeso8gPUqKiru4VZf9hqg1Gj8h1qFRX+\nAADIGCr8ARFIcyW4sLGn+bUC6B3JHyhTmivBhY09za8VQN9I/kAZ0lwJLmzsaX6tAMpD8gfKkOZK\ncGFjT/NrBVAekj/QhzRXggsbe5pfK4DykfyBPqS5ElzY2NP8WgGUj+QP9CLNleDCxp7m1wogHCr8\nAb1IcyW4sLGn+bUCCIciP0Av0lwJLmzsaX6tADwq/AEAkDFU+ENmha1M19Q0P6JIkiXqin1h1p+k\nWIAsIvmjpoStTDd16g26+uoTNXXqDRFHFq+oK/aFWX+SYgGyiuSPmhG2Ml0ul9O0abepvX2nWP6m\nfLVEXbH5xQzwAAAPHklEQVQvzPqTFAuQZSR/1IywlemmTbtJzc051dVdrObmnKZPv7lKkVZX1BX7\nwqw/SbEAWUbyR00IW5kul8tp+vTb5dwxGjjwK3KusSZH/1FX7Auz/iTFAmQdyR81IWxlus5Rf339\nRZKk+vqLanL0H3XFvjDrT1IsQNaR/JF6YSvTbR71HyGzMcrnV8hsTzl3RE2N/qOu2Bdm/UmKBQAV\n/lADwlamW7BgplpaWiQ9q1zusC7ramlZrwULZurQQ0+sVviRibpiX5j1JykWABT5QQ0IW5kul8tp\n7txfqrX13W7tGxq2VmPjGRowIP37xVFX7Auz/iTFAtQyKvwBAJAxVPgDAAAlpX9uEwCAtHvmmcqs\nZ8LhZTUj+QMA0B+VStiBCYe/XdH19YbkDwDIjhQn7Eoi+QMAkotkHQmSPwCgskjYiUfyBwCQsDOG\n5A8AaVThZC2RsLOE5A8AaRMkfpI1+ovkDwDVwLQ6EiTy5G9mF0q6XNJOkl6Q9FXn3LNR9wsAFVHB\npE3CRlJEmvzN7F8k3SjpPEnPSLpU0qNmto9zblWUfQPIMEbZQK+iHvlfKulnzrmfS5KZnS/pU5LO\nlfT9iPsGkCYkbKBqIkv+ZjZQ0iGSvtu5zDnnzOyPko6Kql8AVUKyBlIrypH/SEn1koq/0W9L2jfC\nfgH0hIQNQAk823/u3CmaN29Kt+Xjx09UY+PEGCICYkbCBlBhUSb/VZI6JI0qWj5K0vKentTYSJJH\nylF8BUDCRZb8nXPtZva8pI9Jmi5JZmbB/Vui6heIFcVXAKRA1NP+N0m6J9gJ6LzUr0HSPRH3C5SP\naXUAGRNp8nfO3WdmIyVdKz/dv0DSJ5xzK6PsFxlAwgaAfov8hD/n3G2Sbou6HyQcyRoAEiNxZ/sj\ngSqUuEnYAJAMJP9axCgbANALkn9SkLABAFVC8t8SJGwAQAplK/lTfAUAgAwlf4qvAAAgKenJn2l1\nAAAqLnnJvyjhk7ABAKisxCV/kj0AANFKXPIHqmHJypVq3bix2/KGwYO1xw47xBARAFQPyR+Zs2Tl\nSp0yaZJUIvlr8GBNveYadgAA1DSSPzKndeNGaeNG/eeAARozcOCm5Yvb2/XNjRtLzggAQC0h+SOz\nxgwcqHGDBnVdmMvFEwwAVFFd3AEAAIDqIvkDAJAxTPsjsxa3t/d6HwBqFckfmdMweLA0eLC+uXFj\n92P8gwf7xwGghplzLu4YupoxI2EBoRZxnT+AmjRhgpXTjJE/MokEDyDLSP5AH5glAFBrSP5AL6gG\nCKAWkfyBXlANEEAtIvkDZaAaIIBaQpEfAAAyhuQPAEDGMO0PlIFqgABqCckf6AXVAAHUIir8AX3g\nOn8AqUGFP6AySPAAag3JH5kUZjQ/v6lJ76xb163tdsOH66hx4yKLsScPzJ+vFc3N3ZbvuM02Ovmo\no6oaC7MiQDqR/JE5Yar2zW9q0qe/8Q0Nyee7Nd1QV6cHv/vdqu4APDB/vs6+7jo1lHisVZKuuqpq\nOwBUPwTSi+SPzAlTte+ddes0JJ/Xj8y0V93mK2Nfzed1ST5fckYgSiuam9Ug6RZJexcsf0XSxcHj\n1UL1QyC9SP7IrDBV+/aqq9NBdUVlMTo6Ioqsb3tLOtgKzuuJ8cRdqh8C6UORHwAAMobkDwBAxjDt\nj8wKU7Xv1aIT/orvV9srUpep/ldii4Tqh0AakfyROWGq9m03fLg21NXpkny+2zH+DXV12m748GqE\nvMmO22yjVvmT+4q1Bo9XC9UPgfSiwh8yiev8K4Pr/IGEKbPCH8kfAIBaQXlfhBV2FBflqC/qEWWa\nR/5JwsgfSCeSPySFr9YWZXW3qCvHpbnCX5JQ4Q9IL5I/JIWv1hZldbeoK8elucJfklDhD0gvkj+6\nCFutLcrqblFXjktzhb8kocIfkD4U+QEAIGNI/gAAZExk0/5m9g1Jn5J0kKSNzrkRUfWFyglbrS3K\n6m5RV45Lc4W/JKHCH5A+UR7zHyjpPknzJZ0bYT+ogLDV2qKs7hZ15bg0V/hLEir8AekVeZEfMztb\n0s1lj/wp8hMbrvPnOv+wuM4fSBiK/CCssD/WUf64R504wqw/6wm+NyR4IJ1I/jUuyjrwYdcdZgQd\ndt1hR6DX33+/3lizptvy3UaM0JWnn75FsYSdKQgbe5j1J2nWglkCIDlCJX8zu07SFb00cZL2c84t\n3KKoUBEPzJ+vs6+7Tg0lHmuVpKuu6vcOQNh1h6mUF3bdYSvNXX///frOL36hYSXWvz74t3MHIMrX\n2Z/Yw6w/SdUJqQYIJEvYkf8PJE3uo81r/YxFkjRl7lxNmTev2/KJ48drYmPjlqw6c1Y0N6tB0i2S\n9i5Y/or8n4QtNZqNat1hKuWFXXfYSnNvrFmjYb2sv3BGIMrX2Z/Yw6w/SdUJqQYIJEuo5O+cWy1p\ndUSxSJImNjaS5Ctsb0kHW8E5IBU8yTPsusNUygu77rCV5vaWdHCva+x/LGErAoaNPcz6k1SdkGqA\nQDJEeZ3/7pJGSBotqd7MPhg89Kpzbn3PzwQAAFGK8oS/ayWdVXD/T8G/x0p6PMJ+AQBALyJL/s65\ncySdE9X6Ub5XpC7T1K/EuO4wlfLCrjtspbni9fW2/ihfpxQ+9jDrT1J1QqoBAsnApX41bMdttlGr\n/IlpxVqDx6u17jCV8sKuO2ylud1GjND6Hta/Pni8Gq+zP7GHWX+SqhNSDRBIlsgr/IVGhb+K4jp/\nrvPnOn8gQ8qs8EfyBwCgVlDetzZlZfQU9nVGOcMRVlbeIwDpRfJPkaxUSQv7OqOsZBhWVt4jAOlG\n8k+RrFRJC/s6o6xkGFZW3iMA6UbyT6GsVEnrV8W+iCoZhpWV9whAOtX13QQAANQSkj8AABnDtH8K\nZaVKWr8q9kVUyTCsrLxHANKJ5J8iWamSFvZ1RlnJMKysvEcA0o0iPymTlWvIuc4fAPqBCn8AAGRM\nmcmfE/4AAMgYkj8AABlD8gcAIGNI/gAAZAzJHwCAjCH5AwCQMSR/AAAyhuQPAEDGkPwBAMgYkj8A\nABlD8gcAIGNI/gAAZAzJHwCAjCH5AwCQMSR/AAAyhuQPAEDGkPwBAMgYkj8AABlD8gcAIGNI/gAA\nZAzJHwCAjCH5AwCQMSR/AAAyhuQPAEDGkPwBAMgYkj8AABlD8gcAIGNI/gAAZAzJHwCAjCH5AwCQ\nMSR/AAAyhuQPAEDGkPwBAMiYSJK/mY02szvN7DUzazWzV8zs22Y2MIr+AABA+QZEtN5xkkzSlyQt\nkvQBSXdKapD09Yj6BAAAZYgk+TvnHpX0aMGi183sB5LOF8kfAIBYVfOY/7aS1lSxPwAAUEJVkr+Z\n7SXpIkk/rUZ/AACgZ6Gm/c3sOklX9NLESdrPObew4Dm7SnpY0m+cc3f31ceUuXM1Zd68bssnjh+v\niY2NYcIFAAAlmHOu/MZm20vavo9mrznnckH7XSTNlvSkc+6csjqZMaP8gAAAwGYTJlg5zUKN/J1z\nqyWtLqdtMOKfJelZSeeG6QcAAEQnkrP9gxH/HEmL5c/u39HM74w4596Ook8AAFCeqK7zP07SnsFt\nabDM5M8JqI+oTwAAUIZIzvZ3zt3rnKsvutU550j8AADEjNr+AABkDMkfAICMIfkDAJAxJH8AADKG\n5A8AQMaQ/AEAyBiSPwAAGROqtn+VJC4gAABSoqza/oz8AQDIGJI/AAAZQ/IHACBjSP4AAGQMyR8A\ngIwh+QMAkDEk/4SYMmVK3CGkBtuqfGyr8rGtysN2Kl+StxXJPyGS/CFJGrZV+dhW5WNblYftVL4k\nbyuSPwAAGUPyBwAgY0j+AABkDMkfAICMSeIf9skkM5vonEvu2SEJwrYqH9uqfGyr8rCdypfkbUXy\nBwAgY5j2BwAgY0j+AABkDMkfAICMIfkDAJAxJH8AADKG5A8AQMaQ/BPGzEab2Z1m9pqZtZrZK2b2\nbTMbGHdsSWNm3zCz/zOz9Wa2Ju54ksTMLjSzxWb2npk9ZWaHxR1TEpnZeDObbmbLzCxvZifFHVMS\nmdlVZvaMmb1rZm+b2QNmtk/ccSWRmZ1vZi+YWXNwe9LMPhl3XMVI/skzTpJJ+pKk/SVdKul8Sd+J\nM6iEGijpPkm3xx1IkpjZv0i6UdIkSQdLekHSo2Y2MtbAkmmYpAWSLpBE0ZOejZf0Y0lHSPq4/Hdv\nppkNjTWqZFoq6QpJH5J0iKRZkqaZ2X6xRlWEIj8pYGaXSzrfObdX3LEkkZmdLelm59yIuGNJAjN7\nStLTzrlLgvsm/4N0i3Pu+7EGl2Bmlpf0Wefc9LhjSbpgR3KFpI84556IO56kM7PVki53zk2OO5ZO\njPzTYVtJTGujT8HhoUMkPda5zPk9/D9KOiquuFBztpWfKeF3qRdmVmdmn5PUIGl+3PEUGhB3AOid\nme0l6SJJl8UdC1JhpKR6SW8XLX9b0r7VDwe1JphJ+qGkJ5xzf407niQysw/IJ/shklokneyca4o3\nqq4Y+VeJmV0XnFDU062j+AQaM9tV0sOSfuOcuzueyKurP9sJQFXdJn8+0ufiDiTBmiR9UNLh8uck\n/dzMxsUbUleM/KvnB5L6Ot7zWud/zGwX+RNFnnDOfTnKwBIm1HZCN6skdUgaVbR8lKTl1Q8HtcTM\nbpV0oqTxzrm34o4nqZxzOW3+nfqzmR0u6RJJX4kvqq5I/lXinFstaXU5bYMR/yxJz0o6N8q4kibM\ndkJ3zrl2M3te0sckTZc2TdN+TNItccaGdAsS/2ckNTrnlsQdT8rUSRocdxCFSP4JE4z450haLOnr\nknb0v92Sc674OG6mmdnukkZIGi2p3sw+GDz0qnNufXyRxe4mSfcEOwHPyF8u2iDpnjiDSiIzGyZp\nL/nLayVpz+BztMY5tzS+yJLFzG6TNFHSSZLWm1nnzFKzc25DfJElj5l9V/5w7RJJW0k6Q1KjpOPj\njKsYl/olTHDZWvHxfZM/abs+hpASy8wmSzqrxEPHOucer3Y8SWJmF8jvPI6Sv479q8655+KNKnnM\nrFHSbHW/xv9e51ymZt16E1wGWSpZnOOc+3m140kyM7tT0kcl7SypWdKLkq53zs2KNbAiJH8AADKG\ns/0BAMgYkj8AABlD8gcAIGNI/gAAZAzJHwCAjCH5AwCQMSR/AAAyhuQPAEDGkPwBAMgYkj8AABlD\n8gcAIGP+PxYR7vsSBy79AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10e98bc88>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from mlxtend.data import iris_data\n",
    "from mlxtend.plotting import plot_decision_regions\n",
    "from mlxtend.classifier import Adaline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Loading Data\n",
    "\n",
    "X, y = iris_data()\n",
    "X = X[:, [0, 3]] # sepal length and petal width\n",
    "X = X[0:100] # class 0 and class 1\n",
    "y = y[0:100] # class 0 and class 1\n",
    "\n",
    "# standardize\n",
    "X[:,0] = (X[:,0] - X[:,0].mean()) / X[:,0].std()\n",
    "X[:,1] = (X[:,1] - X[:,1].mean()) / X[:,1].std()\n",
    "\n",
    "\n",
    "ada = Adaline(epochs=30, \n",
    "              eta=0.01, \n",
    "              minibatches=None, \n",
    "              random_seed=1)\n",
    "ada.fit(X, y)\n",
    "plot_decision_regions(X, y, clf=ada)\n",
    "plt.title('Adaline - Stochastic Gradient Descent')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 2 - Gradient Descent"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Iteration: 30/30 | Cost 3.79 | Elapsed: 0:00:00 | ETA: 0:00:00"
     ]
    },
    {
     "data": {
      "image/png": "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\n8gcAIGP+PxYR7vsSBy79AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10f60d080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x10eb32908>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nH8nPkX5e17qh7ru+bRuyfX1G8v0yz93MJk8uu4KCQUNqAuPGFU0lEyaUXYmkZmO3M0mSVDMGDUmS\nVDMGDUn78EurAAAJ90lEQVSSVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMG\nDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmS\nVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMGDUmSVDMNFTQi4viIuC8inouI\n6yPijWXXNNZ0dnaWXULD8ZoNj9dt6Lxmw+N1K1fDBI2IeBfwb8DJwBuAm4HLImLLUgsbY/wDOXRe\ns+Hxug2d12x4vG7lapigASwEzs7M72XmncBxwLPA+8stS5IkDaYhgkZEbAy0AVf2rsvMBK4A9i6r\nLkmStG4NETSALYGNgEf7rX8UmDn65UiSpA0xvuwCamQSwJIlS8quo+H09PTQ3d1ddhkNxWs2PF63\nofOaDY/XbWj6/Ns5qRrHi6IFor5Vmk6eBd6emRf1WX8e0JKZb+u3/1HA90e1SEmSxpb3ZOYPRnqQ\nhniikZkvRUQX0A5cBBARUfn9jAG+chnwHuB+4PlRKlOSpLFgErADxb+lI9YQTzQAIuJI4DyK0SY3\nUoxCeQewS2auKLE0SZI0iIZ4ogGQmRdU5sz4IjAD+D1wkCFDkqT61TBPNCRJUuNplOGtkiSpARk0\nJElSzYzJoOHL1zZcRJwcEWv6LXeUXVe9iYh9I+KiiPhj5RodNsA+X4yIZRHxbERcHhFzyqi1Xqzv\nmkXEuQPcexeXVW89iIjPRsSNEbEyIh6NiJ9GxM4D7Oe91seGXDfvt7VFxHERcXNE9FSWxRFxcL99\nqnKfjbmg4cvXhuU2ig62MyvLPuWWU5emUnRA/ijwio5NEXEicALwIWBP4BmK+27CaBZZZ9Z5zSou\nYe17r2N0Sqtb+wJnAnsBC4CNgV9GxOTeHbzXBrTe61bh/fayh4ATgVaKV3xcBVwYEbtCde+zMdcZ\nNCKuB27IzE9Ufg+KC3pGZp5WanF1KCJOBg7PzNaya2kUEbEGOKLf5HHLgK9k5umV3zejmCL/2My8\noJxK68cg1+xcign3/q68yupb5X+QHgP2y8xrK+u819ZjkOvm/bYeEfEn4H9k5rnVvM/G1BMNX742\n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\ngv02N47XZgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10eb38390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from mlxtend.data import iris_data\n",
    "from mlxtend.plotting import plot_decision_regions\n",
    "from mlxtend.classifier import Adaline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Loading Data\n",
    "\n",
    "X, y = iris_data()\n",
    "X = X[:, [0, 3]] # sepal length and petal width\n",
    "X = X[0:100] # class 0 and class 1\n",
    "y = y[0:100] # class 0 and class 1\n",
    "\n",
    "# standardize\n",
    "X[:,0] = (X[:,0] - X[:,0].mean()) / X[:,0].std()\n",
    "X[:,1] = (X[:,1] - X[:,1].mean()) / X[:,1].std()\n",
    "\n",
    "\n",
    "ada = Adaline(epochs=30, \n",
    "              eta=0.01, \n",
    "              minibatches=1, # for Gradient Descent Learning\n",
    "              random_seed=1,\n",
    "              print_progress=3)\n",
    "\n",
    "ada.fit(X, y)\n",
    "plot_decision_regions(X, y, clf=ada)\n",
    "plt.title('Adaline - Stochastic Gradient Descent')\n",
    "plt.show()\n",
    "\n",
    "plt.plot(range(len(ada.cost_)), ada.cost_)\n",
    "plt.xlabel('Iterations')\n",
    "plt.ylabel('Cost')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 3 - Stochastic Gradient Descent"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Iteration: 15/15 | Cost 3.81 | Elapsed: 0:00:00 | ETA: 0:00:00"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10f60dcc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh4AAAF5CAYAAADQ2iM1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3XmcXFWd///XJ+kkEJYGBJKwEzZBNJgGDGtIF4LiuCCM\nY7shAzNuDExnRoWHOv4cR8blK0EUxa+OwybN4Ix+HRWVNaLImmZRE0SUnbBDBwgBkpzfH6earjTd\nnV6q61ZXvZ6Px3101bm3bn1yaarefe6550ZKCUmSpFqYVHQBkiSpeRg8JElSzRg8JElSzRg8JElS\nzRg8JElSzRg8JElSzRg8JElSzRg8JElSzRg8JElSzRg8JElSzRQePCLi7ohYO8Dy9SFec1hELImI\nVRFxZ0QcV8uaJUnS6BQePIB9gZkVyxuBBFwy0MYRsRPwU+BKYA7wNeC7EfHGGtQqSZLGIOrtJnER\ncSZwVEpp90HWfwl4c0rpdRVtXUBrSumoGpUpSZJGoR56PF4WEVOA9wL/McRm84Ar+rX9EjhgvOqS\nJEnVUVfBAzgaaAXOG2KbmcAj/doeATaNiGnjVZgkSRq7lqIL6OdvgZ+nlB6u9o4j4lXAkcA9wKpq\n71+SpAa2AbAT8MuU0hNj2VHdBI+I2AE4HHjHejZ9GJjRr20GsCKl9MIQrzsS+P7oK5Qkqem9F7ho\nLDuom+BB7u14BLh0PdtdB7y5X9sR5fah3ANw4YUXsueee46mvobR2dnJokWLii6jcB6HPh6LzOPQ\nx2OReRyyZcuW8b73vQ/K36VjURfBIyIC+CBwbkppbb91pwPbppR65+o4B/hY+eqW7wEl4FhgfVe0\nrALYc889mTt3bhWrn3haW1ub/hiAx6GSxyLzOPTxWGQeh1cY81CFehlcejiwPfCfA6ybVV4HQErp\nHuAt5dfcCnQCJ6SU+l/pIkmS6kxd9HiklC4HJg+y7vgB2q4B2sa7LkmSVF310uMhSZKagMGjCXV0\ndBRdQl3wOPTxWGQehz4ei8zjUH11N2X6eImIucCSJUuWOFBIkqQR6O7upq2tDaAtpdQ9ln3Z4yFJ\nkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG\n4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJ\nkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmqm\n6YJHSkVXIElS86qL4BER20TEBRHxeESsjIjbImLuENvPj4i1/ZY1EbH1+t7r/vurW7skSRq+woNH\nRGwGXAu8ABwJ7An8E/DUel6agN2AmeVlVkrp0fW93003jalcSZI0Bi1FFwCcCtyXUjqxou3eYb72\nsZTSipG82Y03jmRrSZJUTYX3eABvBW6OiEsi4pGI6I6IE9f7Kgjg1oh4KCIui4gDh/NmN90Ea9eO\nqV5JkjRK9RA8ZgMfAf4IHAF8CzgrIt4/xGuWAx8CjgHeCdwPLI6Ifdb3Zj098LvfjblmSZI0CvVw\nqmUScGNK6TPl57dFxN7Ah4ELBnpBSulO4M6KpusjYhegEzhuqDebOhWuvBLmzBl74ZIkaWTqIXgs\nB5b1a1tG7skYiRuBg9a30fTpnXzpS60sXtzX1tHRQUdHxwjfTpKkxtPV1UVXV9c6bT09PVXbf6SC\nJ7aIiO8D26WU5le0LQL2SykdPIL9XAasSCkdO8j6ucCSk05awrnnzuXJJ2HKlLFWL0lS4+vu7qat\nrQ2gLaXUPZZ91cMYj0XAvIg4LSJ2iYj3ACcC3+jdICJOj4jzKp6fEhFvK2//mog4E1hQ+ZrB7Lcf\nPPusl9VKklSEwoNHSulm4GigA/gd8CnglJTSxRWbzQK2r3g+FfgqcDuwGHgtUEopLV7f++25J7S2\n5nEekiSptuphjAcppUuBS4dYf3y/518BvjKa95o8GQ47LAePz3xmvZtLkqQqKrzHowjt7XDddbBy\nZdGVSJLUXJoyeJRK8OKLcO21RVciSVJzacrgsddeMGOG4zwkSaq1pgweEfl0y1VXFV2JJEnNpSmD\nB+TTLUuWwNNPF12JJEnNo6mDx9q1rDODqSRJGl9NGzx22gl23tnTLZIk1VLTBg/IvR4OMJUkqXaa\nPngsXQrLlxddiSRJzaGpg8eCBfmnp1skSaqNpg4eM2bA3nsbPCRJqpWmDh7QN84jpaIrkSSp8Rk8\nSnDvvfCXvxRdiSRJja/pg8ehh8KkSZ5ukSSpFpo+eLS2wn77eVmtJEm10PTBA/LplquuyjOZSpKk\n8WPwIN8w7rHH4A9/KLoSSZIam8EDOPBAmDbN0y2SJI03gwew4YZw0EEGD0mSxpvBo6xUgl/9Clav\nLroSSZIal8GjrL0dnnkGbr656EokSWpcBo+yffeFTTf1dIskSePJ4FHW0gLz5xs8JEkaTwaPCu3t\n8NvfwvPPF12JJEmNyeBRoVSCF17I4UOSJFWfwaPC3nvDVlt5ukWSpPFi8KgQkU+3eMM4SZLGh8Gj\nn1IJbroJenqKrkSSpMZj8OinVMo3i/vVr4quRJKkxmPw6Gf2bNhpJ0+3SJI0HgweA2hvd4CpJEnj\nweAxgFIJfv97eOSRoiuRJKmxGDwG0N6ef159dbF1SJLUaAweA5g5E/bay9MtkiRVW10Ej4jYJiIu\niIjHI2JlRNwWEXPX85rDImJJRKyKiDsj4rhq1lQqGTwkSaq2woNHRGwGXAu8ABwJ7An8E/DUEK/Z\nCfgpcCUwB/ga8N2IeGO16iqV4O678yJJkqqjpegCgFOB+1JKJ1a03bue13wE+EtK6RPl53+MiIOB\nTuDyahQ1fz5MmpQvqz3hhGrsUZIkFd7jAbwVuDkiLomIRyKiOyJOXM9r5gFX9Gv7JXBAtYrabDNo\na/N0iyRJ1VQPwWM2uQfjj8ARwLeAsyLi/UO8ZibQ/2LXR4BNI2JatQorlXKPR0rV2qMkSc2tHk61\nTAJuTCl9pvz8tojYG/gwcEG136yzs5PW1tZ12jo6Oujo6HjFtu3t8MUvwtKl8JrXVLsSSZLqT1dX\nF11dXeu09VTxBmb1EDyWA8v6tS0D3jnEax4GZvRrmwGsSCm9MNSbLVq0iLlzh7xg5mUHHQRTp+bT\nLQYPSVIzGOiP8e7ubtra2qqy/3o41XItsEe/tj0YeoDpdUCpX9sR5faqmT4dDjzQcR6SJFVLPQSP\nRcC8iDgtInaJiPcAJwLf6N0gIk6PiPMqXnMOMDsivhQRe0TER4FjgTOqXVypBIsXw+rV1d6zJEnN\np/DgkVK6GTga6AB+B3wKOCWldHHFZrOA7Stecw/wFuBw4FbyZbQnpJT6X+kyZu3tsGIFdHdXe8+S\nJDWfehjjQUrpUuDSIdYfP0DbNUB1TjgNYb/9YOON8+mW/fcf73eTJKmxFd7jUe+mTMmTiV11VdGV\nSJI08Rk8hqG9HX7zG1i1quhKJEma2Awew1Aq5dBxXVWvmZEkqfkYPIbhta+FLbf0slpJksbK4DEM\nkybBggWO85AkaawMHsNUKsGNN+ZLayVJ0ugYPIapVII1a+Caa4quRJKkicvgMUy77AI77ODpFkmS\nxsLgMUwR+bJaB5hKkjR6Bo8RKJXg9tvh0UeLrkSSpInJ4DEC7e355+LFhZYhSdKEZfAYgW22gVe/\n2tMtkiSNlsFjhEolg4ckSaNl8BihUgn+/Ge4996iK5EkaeIxeIzQ/Pn5Chcvq5UkaeQMHiO0xRYw\nd66nWyRJGg2Dxyj0jvNIqehKJEmaWAweo1AqwcMPwx13FF2JJEkTi8FjFA46CKZM8XSLJEkjZfAY\nhY02ggMOMHhIkjRSBo9RKpXyDKZr1hRdiSRJE4fBY5Ta2+Hpp+GWW4quRJKkicPgMUr7759PuXi6\nRZKk4TN4jNLUqXDooU4kJknSSBg8xqC9HX79a3jhhaIrkSRpYjB4jEGpBM8/D9dfX3QlkiRNDAaP\nMZgzJ0+h7ukWSZKGx+AxBpMmwYIFDjCVJGm4DB5jVCrBDTfAs88WXYkkSfXP4DFGpRKsXg3XXFN0\nJZIk1T+Dxxjtthtst53jPCRJGg6DxxhF5MtqHechSdL6GTyqoFSCW2+Fxx8vuhJJkupb4cEjIj4b\nEWv7LUuH2H7+ANuviYita1l3pfb2/HPx4qIqkCRpYig8eJT9HpgBzCwvB69n+wTsVrH9rJTSo+Na\n4RC22w52393TLZIkrU9L0QWUrU4pPTbC1zyWUloxLtWMQqkEV1xRdBWSJNW3eunx2C0iHoyIP0fE\nhRGx/Xq2D+DWiHgoIi6LiANrUeRQSiX405/g/vuLrkSSpPpVD8HjeuCDwJHAh4GdgWsiYqNBtl8O\nfAg4BngncD+wOCL2Gf9SB3fYYfkKFy+rlSRpcJFSKrqGdUREK3Av0JlS+s9hvmYxcG9K6bghtpkL\nLDn00ENpbW1dZ11HRwcdHR2jL7ps7lzYe284//wx70qSpEJ0dXXR1dW1TltPTw/X5Jky21JK3WPZ\nf90FD4CIuBG4PKX0qWFu/2XgoJTSQUNsMxdYsmTJEubOnVulStf18Y/DRRfBAw/k3g9JkhpBd3c3\nbW1tUIXgUQ+nWtYRERsDu5JPqQzXPiPcflyUSvDQQ3DnnUVXIklSfSr8qpaI+ArwE/LplW2BzwEv\nAV3l9acD2/aeRomIU4C7gT8AGwB/BywA3ljz4vs5+GBoacmX1e6xR9HVSJJUf+qhx2M74CLgDuBi\n4DFgXkrpifL6WUDlVS5Tga8CtwOLgdcCpZTS4hrVO6iNN4Z585zPQ5KkwRTe45FSGnJUZ0rp+H7P\nvwJ8ZVyLGoNSCc46C9auhUn1EOskSaojfjVWWXs7PPVUvneLJElal8GjyubNg+nTPd0iSdJADB5V\nNnUqHHKIE4lJkjSQUQWPiPiXiJg+QPuGEfEvYy9rYmtvh2uugRdfLLoSSZLqy2h7PD4LbDxA+/Ty\nuqZWKsHKlXDDDUVXIklSfRlt8Ajyren7mwM8OfpyGsM++8Dmm3u6RZKk/kYUPCLiqYh4khw67oyI\nJyuWHuBy4JLxKHQimTwZFixwgKkkSf2NdB6PfyT3dnyPfEqlp2Ldi8A9KaXrqlTbhNbeDp2d8Nxz\nsNFg99mVJKnJjCh4pJTOA4iIu4FrU0qrx6WqBlAqwUsvwa9/DW96U9HVSJJUH0Y7xuMZYM/eJxHx\n9oj4fxFxekRMrU5pE9see8A22zjOQ5KkSqMNHt8GdgeIiNnAfwErgb8Gvlyd0ia2iHy6xXEekiT1\nGW3w2B3onRT8r4FfpZTeA3wQOKYKdTWEUgluuQWebPrrfCRJysZyOW3vaw8HLi0/vh/YcqxFNYr2\ndkgJFi8uuhJJkurDaIPHzcCnI+L9wHzgZ+X2nYFHqlFYI9hhB9h1V0+3SJLUa7TB4x+BucA3gC+k\nlO4qtx8L/LYahTWKUsngIUlSr5HO4wFASul24LUDrPo4sGZMFTWYUgm+/W148EHYdtuiq5EkqVhj\nujttRLRFxPvKy9yU0qqU0kvVKq4RHHZY/ulltZIkjf7utFtHxNXATcBZ5eXmiLgyIraqZoET3VZb\nwZw5nm6RJAlG3+PxdfLdaV+TUtoipbQFsDewKTmEqEKplHs80kC31ZMkqYmMNni8CfhoSmlZb0NK\naSnwMeDN1SiskZRKcP/9cNdd699WkqRGNtrgMQkYaCzHS2PYZ8M65BBoafF0iyRJow0JVwFfi4ht\nehsiYltgEeDXaz+bbAL772/wkCRptMHjJPJ4jnsi4s8R8Wfg7nLbP1SruEZSKsHVV8PatUVXIklS\ncUYVPFJK95MnEHsLcGZ5OSqlNDel9EAV62sY7e3wxBNw++1FVyJJUnFGFDwioj0ilkbEpim7PKX0\n9ZTS14GbIuIPEXHkONU6oR1wAGy4IVx+edGVSJJUnJH2ePwj8J2U0or+K1JKPcC38VTLgKZNg7e+\nFb7zHU+3SJKa10iDxxzgF0Osvwx43ejLaWydnfCnP8HPfrb+bSVJakQjDR4zGPgy2l6rAWcuHcS8\nefmUyxlnFF2JJEnFGGnweJA8Q+lgXgcsH305ja+zExYvhltuKboSSZJqb6TB41Lg8xGxQf8VEbEh\n8Dngp9UorFEdfTTsuCMsWlR0JZIk1d5Ig8e/AVsAd0bEJyLi7eXlk8Afy+u+UO0iG0lLC5xyCnR1\nwYMPFl2NJEm1NaLgkVJ6BDgQ+D3w78CPysvp5baDy9toCCeckC+tPfvsoiuRJKm2RjyBWErp3pTS\nUcCWwBuAecCWKaWjUkp3V7vARrTppnDiiXDOOfDcc0VXI0lS7Yz6hm4ppadSSjellG5MKT012v1E\nxGcjYm2/Zel6XnNYRCyJiFURcWdEHDfa9y/KySdDTw+cf37RlUiSVDv1cifZ35Mv1Z1ZXg4ebMOI\n2Ik8gPVK8rwiXwO+GxFvHPcqq2inneCYY/IgUycUkyQ1i3oJHqtTSo+llB4tL08Ose1HgL+klD6R\nUvpjSuls4L+BztqUWj1OKCZJajb1Ejx2i4gHy3e6vTAith9i23nAFf3afgkcMH7ljY8DDsiTijmh\nmCSpWdRD8Lge+CBwJPBhYGfgmojYaJDtZwL9r5x5BNg0IqaNV5HjZeFCJxSTJDWPwoNHSumXKaX/\nSSn9PqV0OXAUsDnwroJLqwknFJMkNZOWogvoL6XUExF3ArsOssnD5IGolWYAK1JKL6xv/52dnbS2\ntq7T1tHRQUdHx2jKHbOWlnyFyyc/Cf/+77DttoWUIUkSAF1dXXR1da3T1tPTU7X9R0qpajurhojY\nGLgP+JeU0jcGWP9F4M0ppTkVbRcBm5XnFxlsv3OBJUuWLGHu3LnjUPno9fTA9tvDSSfB6acXXY0k\nSevq7u6mra0NoC2l1D2WfRV+qiUivhIRh0bEjhFxIHkm1JeArvL60yPivIqXnAPMjogvRcQeEfFR\n4Fhgwg7RbG3NE4p9+9tOKCZJamyFBw9gO+Ai4A7gYuAxYF5K6Yny+lnAy1e5pJTuAd4CHA7cSr6M\n9oSUUv8rXSaUk0+Gp592QjFJUmMrfIxHSmnIwRUppeMHaLsGaBu3ogqw007wznfmQaYf+hBMqodI\nKElSlfn1VkcWLswTil16adGVSJI0PgwedcQJxSRJjc7gUWcWLoSrr3ZCMUlSYzJ41BknFJMkNTKD\nR53pnVDs4ovhoYeKrkaSpOoyeNShE06ADTaAs88uuhJJkqrL4FGHeicUO+ccJxSTJDUWg0edckIx\nSVIjMnjUqd4Jxc48E9auLboaSZKqw+BRxxYuhDvvdEIxSVLjMHjUMScUkyQ1GoNHnevszBOK3Xpr\n0ZVIkjR2Bo869853wg47OKGYJKkxGDzqXEsLnHIKdHU5oZgkaeIzeEwAJ5wA06Y5oZgkaeIzeEwA\nlROKrVxZdDWSJI2ewWOCcEIxSVIjMHhMEDvvnAeaLlrkhGKSpInL4DGBdHY6oZgkaWIzeEwgBxwA\nb3iDl9ZKkiYug8cEEpGnUb/qKicUkyRNTAaPCcYJxSRJE5nBY4JpaclXuHR1wfLlRVcjSdLIGDwm\noBNPdEIxSdLEZPCYgHonFPvWt5xQTJI0sRg8JignFJMkTUQGjwlq553h6KOdUEySNLEYPCawhQvz\nhGI//3nRlUiSNDwGjwmsd0KxM84ouhJJkobH4DGBOaGYJGmiMXhMcE4oJkmaSAweE5wTikmSJhKD\nRwNwQjFJ0kRRd8EjIk6NiLURMeiQyYiYX96mclkTEVvXstZ64YRikqSJoq6CR0TsB/w9cNswNk/A\nbsDM8jIrpfToOJZX13onFLvggqIrkSRpcHUTPCJiY+BC4ETg6WG+7LGU0qO9y/hVV/+cUEySNBHU\nTfAAzgZ+klK6apjbB3BrRDwUEZdFxIHjWNuEsHAh/PGPTigmSapfdRE8IuLdwD7AacN8yXLgQ8Ax\nwDuB+4HFEbHP+FQ4MTihmCSp3rUUXUBEbAecCRyeUnppOK9JKd0J3FnRdH1E7AJ0AsdVv8qJIQI6\nO+Hd74bbboM5c4quSJKkdRUePIA2YCugOyKi3DYZODQiTgKmpZTSMPZzI3DQ+jbq7OyktbV1nbaO\njg46OjpGVnWdOuaYvgnFzj236GokSRNNV1cXXV1d67T19PRUbf8xvO/08RMRGwE79ms+F1gGfDGl\ntGyY+7kMWJFSOnaQ9XOBJUuWLGHu3LljqLj+ffWrcNppcO+9MGtW0dVIkia67u5u2traANpSSt1j\n2VfhYzxSSs+llJZWLsBzwBO9oSMiTo+I83pfExGnRMTbImKXiHhNRJwJLAC+Ucy/or44oZgkqV4V\nHjwG0b8bZhawfcXzqcBXgduBxcBrgVJKaXEtiqt3ra1wwglwzjlOKCZJqi91GTxSSu0ppYUVz49P\nKbVXPP9KSmm3lNJGKaWtUkqllNI1xVRbn04+GZ56ygnFJEn1pS6Dh8Zu9mwnFJMk1R+DRwPr7HRC\nMUlSfTF4NLADD4T998+9HpIk1QODRwOLyNOoX3llnlBMkqSiGTwaXOWEYpIkFc3g0eBaWuAf/gEu\nugiWLy+6GklSszN4NIHeCcW++c2iK5EkNTuDRxPYbLM8odi3vuWEYpKkYhk8moQTikmS6oHBo0nM\nng3veAeceaYTikmSimPwaCILF8Idd8AvflF0JZKkZmXwaCK9E4r98z/DffcVXY0kqRkZPJpIBJx7\nLqxaBfvtB9ddV3RFkqRmY/BoMnvuCTfcALvvDgsWwPe/X3RFkqRmYvBoQlttBVdcAR0d8L73wac+\n5YBTSVJttBRdgIoxbRp873uw117wyU/mQafnnw8bbVR0ZZKkRmaPRxOLgI9/HH78Y7jsMjjkEHjg\ngaKrkiQ1MoOHeOtb4dpr4Ykn8qDTG28suiJJUqMyeAiA170uB47Zs2H+fLj44qIrkiQ1IoOHXjZj\nBlx5Jfz1X+eBp5/9rINOJUnV5eBSrWODDeC88/Kg09NOg2XL8twf06cXXZkkqRHY46FXiIBTT4Uf\n/hB+9jM49FB48MGiq5IkNQKDhwZ19NF50Okjj+Sp1m++ueiKJEkTncFDQ9pnH7jpJth++9zz8YMf\nFF2RJGkiM3hovWbOhKuvhne8A971Lvj85yGloquSJE1EDi7VsGy4Yb6vy2teA5/+NCxdmmc+3XDD\noiuTJE0k9nho2CLyfV1+8IM82+n8+bB8edFVSZImEoOHRuzYY+HXv4aHHsqDTm+5peiKJEkThcFD\no9LWlmc6nTkTDj44X3orSdL6GDw0attsA7/6FfzVX8Exx8DppzvoVJI0NAeXakymT8/3ddlrrzz+\nY+lS+O538wyokiT1Z4+Hxiwi39fl4ovhf/4HFizIk45JktSfwUNV8zd/A9dcA/feC/vtB7fdVnRF\nkqR6Y/BQVe23Xx50uuWWcNBB+bJbSZJ61V3wiIhTI2JtRJyxnu0Oi4glEbEqIu6MiONqVaOGtt12\n+XLbN70p3+/lS19y0KkkKaur4BER+wF/DwzZSR8ROwE/Ba4E5gBfA74bEW8c5xI1TBttBJdckgec\nnnoqHH88vPBC0VVJkopWN8EjIjYGLgROBJ5ez+YfAf6SUvpESumPKaWzgf8GOse5TI3ApEn5vi7f\n/34eeFoqwaOPFl2VJKlIdRM8gLOBn6SUrhrGtvOAK/q1/RI4oOpVacze8x5YvBjuuivPdPq73xVd\nkSSpKHURPCLi3cA+wGnDfMlMoP8Fm48Am0bEtGrWpuqYNy8POt1sMzjwwHy/l9Wri65KklRrhU8g\nFhHbAWcCh6eUXhrv9+vs7KS1tXWdto6ODjo6Osb7rZveDjvAb34D738/vOtdOYQccQQcdVQeiDpj\nRtEVSpK6urro6upap62np6dq+49U8OUGEfF24IfAGiDKzZOBVG6blvoVGRG/ApaklBZWtH0QWJRS\n2nyQ95kLLFmyZAlz586t+r9Dw5cS3HAD/PzncOmlcPPNub2tDd785ry84Q0weXKxdUqSsu7ubtra\n2gDaUkrdY9lXPZxquQJ4LflUy5zycjN5oOmc/qGj7Dqg1K/tiHK76lxEPvXyuc/BTTflWU7PPx92\n2w2++c08/8dWW0FHR253QKokNY7CT7WklJ4Dlla2RcRzwBMppWXl56cD26aUeufqOAf4WER8Cfge\nOYQcCxxVs8JVNVtvnU+/vP/9sGZNHgvS2xty8cV5m3337esN2X9/e0MkaaKqhx6PgfTv5ZgFbP/y\nypTuAd4CHA7cSr6M9oSUUv8rXTTBTJ4MBxwA//qv+RTMww/DeefBLrvAN76RB6ZuvXW+UuaCC+Cx\nx4quWJI0EoX3eAwkpdTe7/nxA2xzDdBWs6JUiBkz4AMfyMvq1bk35NJLc49IV1c+bdPbG3LUUfmx\nvSGSVL/qtcdDeoWWltzj8W//BkuWwPLl8L3vwc47w1ln5XEjM2bAe9+bJy17/PGiK5Yk9VeXPR7S\ncMycCR/8YF5Wr4brr889IT//OVx0Ue4N2W+/3BPy5jfn3pBJRm1JKpQfw2oILS1w8MHwhS9Adzc8\n9BD8x3/AjjvCokX58twZM/IA1osusjdEkopij4ca0qxZ+cZ0xx+fe0Ouu66vN+TCC/vGhuyzD+y5\nZ9+y/fb2ikjSeDJ4qOG1tMAhh+Tl9NNzb8gvfgFXXpnnEbngAli1Km87fTq8+tWw117rBpJddoEp\nU4r9d0hSIzB4qOlssw387d/mBfLcIffeC8uWrbv89KfwdPk+yVOmwK675hBSGUr22COHFUnS8Bg8\n1PQmT4bZs/Pylrf0taeUZ1WtDCNLl+axI8uX520i8jiS3iBSGUo2H3DyfklqbgYPaRAR+cqZmTNh\nwYJ11z39NNxxx7qh5Mc/zgNZeyf5nzFj3dM1vaFk1qy871pauxZeeglefHHdpbdt9epcd5HLhhvm\n3qhtt4XW1tofI0m1YfCQRmGzzfK8IfPmrdv+/PNw553rBpJf/zr3krz4Yt5m0037wsirXw3Tpr0y\nCAwWENaPa5rtAAAOfUlEQVTXNlj7mjW1P0ZjMX16DiBDLTNnOu5GE9fatfDUU3n25YGWxx/ve7xi\nBWy8cf7caW3NS+/jgdoqH2+wQf2FeIOHVEUbbghz5uSl0urVcPfdrzxt86Mf5VAwdWpepkzpezzQ\n86lT8wfJppsOvc1w9tPbNmVKHoAbUeyyciU8+OArl3vvhd/+Ng8KfuGFvmMakafPX19Asffkldau\nhZ4eePLJvDz11Ct/trTkL7tNNsk/Kx/3b5s+3avBXnpp3bAwWIjoXZ54Iv93qDRpErzqVfkmmb3L\nrrvm3+Fnn809rT09+f+J22/ve75iRV9Pa39Tp448rFS2tbbm34VqMnhINdDSku++u9tu8La3FV1N\n/dp558HXpZQ/rB98MIeQ/gHluuvyz/5ztAzVe9J7amfWrInZe7Jq1SvDw3AeP/30wF9ULS2wxRb5\ni2fNmvxl9+yz8Nxz66+lN4gMN6wM1tb7eNq0wQNj7+m5tWv7fo7X41Wrhg4QvUtPzyvrnDp13RCx\n7bb5j5LKtspl881HF+DWroVnnsk19IaR3p8DtT39NDzwwLptzz8/+P432qi6g+gNHpImhAjYcsu8\n9O9RqvTCCwMHk+H0nsyYkb8sWlr6lt4eoYGWodaNdv2kSfmLYDhBovcy8P422SR/iW2xRV423zwP\ngu59XNle+XjjjQf+sl+zJvdIPfNMXxjpfTxQW+XjJ5+E++575frK4z+QyZPz8RkoYBRlo43WDQq7\n7w4HHdT3fMst112/ySa16W2bNKmvd2KHHUa3jxdfHDqw3HEHfOc71anX4CGpoUyblntORtN78uij\n+bTYSy/ln/2XVav6Hg+2zXDWD2fMzeTJfaGgMjy8/vVDh4fNN69+783kyflLdJNNqrfPF1/MPSmD\nhZlnnsnHatKk/OU9adLgj8dz/bRpfaFiww2r9++vN5W9MwPp7jZ4SNKoDbf3ZLykNHQoaW0dvPeh\nUfSONfKy8+Zj8JCkGovIvRITcVyJNFZNPg5ZkiTVksFDkiTVjMFDkiTVjMFDkiTVjMFDkiTVjMFD\nkiTVjMFDkiTVjMFDkiTVjMFDkiTVjMFDkiTVjMFDkiTVjMFDkiTVjMFDkiTVjMFDkiTVjMFDkiTV\njMFDkiTVjMFDkiTVjMFDkiTVTOHBIyI+HBG3RURPefltRLxpiO3nR8TafsuaiNi6lnVPZF1dXUWX\nUBc8Dn08FpnHoY/HIvM4VF/hwQO4H/gkMBdoA64CfhwRew7xmgTsBswsL7NSSo+Od6GNwv+RMo9D\nH49F5nHo47HIPA7V11J0ASmln/Vr+nREfASYBywb4qWPpZRWjF9lkiSp2uqhx+NlETEpIt4NTAeu\nG2pT4NaIeCgiLouIA2tToSRJGovCezwAImJvctDYAHgGODqldMcgmy8HPgTcDEwD/g5YHBH7p5Ru\nrUW9kiRpdOoieAB3AHOAVuBY4PyIOHSg8JFSuhO4s6Lp+ojYBegEjhviPTYAWLZsqLM3zaGnp4fu\n7u6iyyicx6GPxyLzOPTxWGQeh6ziu3ODse4rUkpj3UfVRcTlwF0ppY8Mc/svAwellA4aYpv3AN+v\nUomSJDWj96aULhrLDuqlx6O/SeTTKMO1D/kUzFB+CbwXuAdYNbqyJElqShsAO5G/S8ek8OAREacD\nPwfuAzYhh4P5wBHl9f8ObJNSOq78/BTgbuAP5APxd8AC4I1DvU9K6QlgTClNkqQm9ttq7KTw4AFs\nDZwHzAJ6gNuBI1JKV5XXzwS2r9h+KvBVYBtgZXn7UkrpmppVLEmSRqUux3hIkqTGVFfzeEiSpMZm\n8JAkSTXTFMEjIj4WEXdHxPMRcX1E7Fd0TbUWEadFxI0RsSIiHomIH0XE7kXXVbSIOLV8o8Eziq6l\n1iJim4i4ICIej4iV5Zs1zi26rlorz5j8+Yj4S/k43BURny66rvEWEYdExP9GxIPl/wfeNsA2/1qe\nIXplRFweEbsWUet4G+pYRERLRHwpIm6PiGfL25wXEbOKrHk8DOd3omLbc8rbnDzS92n44BERf0Me\njPpZ4PXAbcAvI2LLQgurvUOArwNvAA4HpgCXRcSGhVZVoHIA/Xvy70RTiYjNgGuBF4AjgT2BfwKe\nKrKugpxKng35o8CrgU8An4iIkwqtavxtBNxK/ne/YrBfRHwSOIn8/8j+wHPkz86ptSyyRoY6FtPJ\nUzZ8jvwdcjSwB/DjWhZYI0P+TvSKiKPJ3yUPjuZNGn5waURcD9yQUjql/DzId8Q9K6X05UKLK1A5\neD0KHJpS+k3R9dRaRGwMLAE+AnwGuCWltLDYqmonIr4IHJBSml90LUWLiJ8AD6eU/q6i7b+BlSml\nDxRXWe1ExFrgHSml/61oewj4SkppUfn5psAjwHEppUuKqXT8DXQsBthmX+AGYMeU0gM1K66GBjsO\nEbEt+RYnRwKXAotSSmeNZN8N3eMREVOANuDK3raUk9YVwAFF1VUnNiMn2ieLLqQgZwM/qbhsu9m8\nFbg5Ii4pn3rrjogTiy6qIL8FShGxG0BEzAEOIn+oNqWI2Jk8lUHlZ+cK8pdts392Qt/n59NFF1JL\n5T/czwe+nFIa9f1H6mEej/G0JTCZnNIrPULuKmtK5V+eM4HfpJSWFl1PrZXvgLwPsG/RtRRoNrm3\n56vAF8hd6WdFxAsppQsKraz2vghsCtwREWvIf5B9KqV0cbFlFWom+Yt1oM/OmbUvp35ExDTy78xF\nKaVni66nxk4FXkwpfWMsO2n04KGBfRPYi/xXXVOJiO3IoevwlNJLRddToEnAjSmlz5Sf31a+S/SH\ngWYLHn8DvAd4N7CUHEq/FhEPNWEI0xAiogX4ATmUfbTgcmoqItqAk8njXMakoU+1AI8Da4AZ/dpn\nAA/XvpziRcQ3gKOAw1JK67u/TSNqA7YCuiPipYh4iTxF/ykR8WK5N6gZLAf6d5UuA3YooJaifRn4\nYkrpBymlP6SUvg8sAk4ruK4iPQwEfna+rCJ0bE+eXbvZejsOJn923l/x2bkjcEZE/GUkO2ro4FH+\ni3YJUOptK3+xlKjSnPMTSTl0vB1YkFK6r+h6CnIF8FryX7VzysvNwIXAnNToo637XMsrTzfuAdxb\nQC1Fm07+A6XSWhr883EoKaW7yQGj8rNzU/KVDM342dkbOmaTb9HRjFd/nQ+8jr7PzTnAQ+TgfuRI\ndtQMp1rOAM6NiCXAjUAn+YPm3CKLqrWI+CbQAbwNeC4iev+S6UkpNc3delNKz5G7018WEc8BT4xl\nsNQEtAi4NiJOAy4hf6GcSL7pYrP5CfDpiHiAfPPJueTPie8WWtU4i4iNgF3JPRsAs8sDa59MKd1P\nPiX56Yi4i3xX788DD9CAl5EOdSzIvYP/Q/5j5a+AKRWfn0820inbYfxOPNVv+5fIV4T9aURvlFJq\n+IV8Lu4e4HnyZUD7Fl1TAcdgLfmvuv7LB4quregFuAo4o+g6Cvh3H0W+yeJK8hfu3xZdU0HHYSPy\nHyh3k+eq+BN5zoaWomsb53/3/EE+F75Xsc3/R/6rdiX5dui7Fl13rY8F+XRC/3W9zw8tuvZa/070\n2/4vwMkjfZ+Gn8dDkiTVj6Y9hylJkmrP4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJkmrG4CFJ\nkmrG4CFJkmrG4CGpbkXE3RFxctF1SKoeg4ckACLiPyPih+XHV0fEGTV87+MiYqAbb+0L/N9a1SFp\n/DXDTeIkFSQipqTh3UQrgFfcvyGl9ET1q5JUJHs8JK0jIv6TfLOoUyJibUSsiYgdyuv2johLI+KZ\niHg4Is6PiFdVvPbqiPh6RCyKiMeAX5TbOyPi9oh4NiLui4izI2J6ed188s24Wive71/K69Y51RIR\n20fEj8vv3xMR/xURW1es/2xE3BIR7yu/9umI6CrfdbN3m2PLtayMiMcj4rKI2HBcD6qklxk8JPV3\nMvkuzt8BZgCzgPsjohW4ElhCvnX8kcDWwCX9Xv8B4AXgQODD5bY1wD8Ae5XXLwC+XF73W+AfgRUV\n7/d/+hcVEQH8L7AZcAhwODAbuLjfprsAbyffffct5BB1ankfM4GLyLe8f3V53Q/puw24pHHmqRZJ\n60gpPRMRLwIrU0qP9bZHxElAd0rpMxVtJwL3RcSuKaW7ys1/Simd2m+fZ1U8vS8iPgN8CzgppfRS\nRPTkzfrebwCHA68BdkopPVR+/w8Af4iItpTSkt6ygONSSivL21wAlIDPkEPNZOBHKaX7y9v/YbjH\nRtLY2eMhabjmAO3l0xzPRMQzwDLy2IxdKrZb0v+FEXF4RFwREQ9ExArgAuBVEbHBCN7/1cD9vaED\nIKW0DHga2LNiu3t6Q0fZcnLPDMBt5F6b30fEJRFxYkRsNoIaJI2RwUPScG1MPtXxOnII6V12A66p\n2O65yhdFxI7AT4BbgXeST9N8rLx66jjU2X8wa6L8WZdSWptSOgJ4E7mn4x+AO8o1SqoBg4ekgbxI\nPiVRqZt8quPelNJf+i3PD7GvNiBSSv+cUrqxfEpm22G8X3/LgO0j4uXXRsRe5DEfIzpdklK6LqX0\nOeD15KBy9EheL2n0DB6SBnIP8IaI2LHiqpWzgS2AiyNi34iYHRFHRsT3ygM/B3MXMCUiTo6InSPi\n/cCHBni/jSOiPSJeNdBVJimlK4DfA9+PiNdHxP7AecDVKaVbhvOPioj9I+K0iGiLiO2BY4AtgaXD\neb2ksTN4SBrI/yFfibIUeDQidkgpLQcOIn9u/BK4HTgDeCql1DsHx0BzcdwOLAQ+AfwO6KB8lUnF\nNtcB5wD/BTwKfHyQ/b0NeAr4FXAZOdS8ewT/rhXAocDPgD8C/wosTCldNoJ9SBqD6Pu8kCRJGl/2\neEiSpJoxeEiSpJoxeEiSpJoxeEiSpJoxeEiSpJoxeEiSpJoxeEiSpJoxeEiSpJoxeEiSpJoxeEiS\npJoxeEiSpJoxeEiSpJr5/wGzbdWwwCI7rAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10f60d2b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from mlxtend.data import iris_data\n",
    "from mlxtend.plotting import plot_decision_regions\n",
    "from mlxtend.classifier import Adaline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Loading Data\n",
    "\n",
    "X, y = iris_data()\n",
    "X = X[:, [0, 3]] # sepal length and petal width\n",
    "X = X[0:100] # class 0 and class 1\n",
    "y = y[0:100] # class 0 and class 1\n",
    "\n",
    "# standardize\n",
    "X[:,0] = (X[:,0] - X[:,0].mean()) / X[:,0].std()\n",
    "X[:,1] = (X[:,1] - X[:,1].mean()) / X[:,1].std()\n",
    "\n",
    "\n",
    "ada = Adaline(epochs=15, \n",
    "              eta=0.02, \n",
    "              minibatches=len(y), # for SGD learning \n",
    "              random_seed=1,\n",
    "              print_progress=3)\n",
    "\n",
    "ada.fit(X, y)\n",
    "plot_decision_regions(X, y, clf=ada)\n",
    "plt.title('Adaline - Stochastic Gradient Descent')\n",
    "plt.show()\n",
    "\n",
    "plt.plot(range(len(ada.cost_)), ada.cost_)\n",
    "plt.xlabel('Iterations')\n",
    "plt.ylabel('Cost')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 4 - Stochastic Gradient Descent with Minibatches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Iteration: 15/15 | Cost 3.87 | Elapsed: 0:00:00 | ETA: 0:00:00"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x104570b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh4AAAF5CAYAAADQ2iM1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3XmcXGWd7/HPLwlJCIEgWxIWw74oCKZlS5SIiQRDR0RB\nUm644IIyYmbGbdzGcfS6jKCO273jnRFlaASRq4ksQRAZgwikJWyBiBA2ScAQEkiAhOS5fzzVdKfp\ntbq7TlXX5/16nVdXna1+fdKp+tbzPOecSCkhSZJUDSOKLkCSJDUOg4ckSaoag4ckSaoag4ckSaoa\ng4ckSaoag4ckSaoag4ckSaoag4ckSaoag4ckSaoag4ckSaqamggeEbF7RPw0Iv4WERsiYmlETO1h\n/RkRsaXTtDkidqtm3ZIkqX9GFV1AROwILAauAWYDfwMOANb0smkCDgSeemFGSo8NUZmSJGkQFB48\ngE8BD6aUzuww74E+bvt4SmndENQkSZKGQC10tcwFbomIiyNiVUS0RsSZvW4FAdwaEX+NiEURMW2I\n65QkSQNUC8FjX+As4B7gBOAHwHci4p09bPMo8EHgLcCbgYeA6yLiiCGuVZIkDUCklIotIOI54KaU\n0ms6zPs28KqU0vR+7Oc64IGU0hndLN+ZPIZkBfDsQGqWJKnBjAX2Bq5KKa0eyI5qYYzHo8CyTvOW\nkVsy+uMmoKegMhv4737uU5IktXs7cOFAdlALwWMxcFCneQfR9wGmbY4gh5jurAC44IILOOSQQ/q5\n6+Fl/vz5nHfeeUWXUTiPQzuPReZxaOexyDwO2bJly3jHO94B5c/SgaiF4HEesDgiPg1cDBwNnAm8\nv22FiPgKsEdbN0pEnAPcD9xJbv55P3A88PoeXudZgEMOOYSpU7u9REhDmDBhQsMfA/A4dOSxyDwO\n7TwWmcfhRQY8VKHw4JFSuiUiTgG+CnyOHCjOSSld1GG1ycBeHZ6PBr4J7A5sAG4DZqaUrq9O1ZIk\nqRKFBw+AlNLlwOU9LH9Pp+ffAL4x1HVJkqTBVQun00qSpAZh8GhApVKp6BJqgsehncci8zi081hk\nHofBV/h1PKqlfNO5JUuWLHGgkCRJ/dDa2kpTUxNAU0qpdSD7ssVDkiRVjcFDkiRVjcFDkiRVjcFD\nkiRVjcFDkiRVjcFDkiRVjcFDkiRVjcFDkiRVjcFDkiRVjcFDkiRVjcFDkiRVjcFDkiRVjcFDkiRV\nTcMFj2eeKboCSZIaV8MFj1tuKboCSZIaV8MFj//5n6IrkCSpcTVk8Eip6CokSWpMDRc8HnsMli4t\nugpJkhpTwwWPceNg4cKiq5AkqTE1XPA49liDhyRJRWm44PGa18BNN8GqVUVXIklS42m44DF9ev55\n+eXF1iFJUiNquOCx005wzDF2t0iSVISGCx4Azc2waBE891zRlUiS1FgaNng8/TRcf33RlUiS1Fga\nMngcdhjstRcsWFB0JZIkNZaGDB4RMHduHufhVUwlSaqehgwekLtb7r8fli0ruhJJkhpHwwaP44/3\nKqaSJFVbwwaPsWNh1izHeUiSVE0NGzwgd7fccAOsXl10JZIkNYaGDh4nnQRbtsCVVxZdiSRJjaGh\ng8fuu0NTk+M8JEmqloYOHpC7W668EjZtKroSSZKGP4NHMzz5JCxeXHQlkiQNfw0fPKZOhcmT7W6R\nJKkaGj54jBiRB5kaPCRJGnoNHzwgd7fccw/8+c9FVyJJ0vBWE8EjInaPiJ9GxN8iYkNELI2Iqb1s\n89qIWBIRz0bE8og4o9LXnzULxoyx1UOSpKFWePCIiB2BxcBzwGzgEOAfgDU9bLM3sBC4Bjgc+Dbw\no4h4fSU1bLcdvO51Bg9JkobaqKILAD4FPJhSOrPDvAd62eYs4L6U0ifKz++JiFcD84GrKymiuRnO\nOQfWroUJEyrZgyRJ6k3hLR7AXOCWiLg4IlZFRGtEnNnLNscAv+k07yrg2EqLOOkkeP55WLSo0j1I\nkqTe1ELw2JfcgnEPcALwA+A7EfHOHraZBKzqNG8VsENEjKmkiClT4LDD7G6RJGko1UJXywjgppTS\n58rPl0bEocCHgJ8O9ovNnz+fCZ36UkqlEqVSieZm+I//gM2bYeTIwX5lSZJqX0tLCy0tLVvNW7t2\n7aDtP1JKg7azigqIWAEsSil9oMO8DwGfSSnt1c02vwOWpJT+vsO8dwPnpZRe0s02U4ElS5YsYerU\nrk+Y+cMfYNq0fBXTadMq/Y0kSRpeWltbaWpqAmhKKbUOZF+10NWyGDio07yD6HmA6R+AmZ3mnVCe\nX7GjjoJddrG7RZKkoVILweM84JiI+HRE7BcRbwPOBL7btkJEfCUizu+wzQ+BfSPiaxFxUER8GDgV\nOHcghYwcCXPmGDwkSRoqhQePlNItwClACbgd+AxwTkrpog6rTQb26rDNCuAkYBZwK/k02vellDqf\n6dJvzc1w++3wQG8n9EqSpH6rhcGlpJQuBy7vYfl7uph3PdA02LXMng2jRuVWj498ZLD3LklSYyu8\nxaPW7LADzJhhd4skSUPB4NGF5ma49lp4+umiK5EkaXgxeHShuRk2boRrrim6EkmShheDRxf23x8O\nPhgWLCi6EkmShheDRzeam+HXv4YtW4quRJKk4cPg0Y3mZli5EloHdH02SZLUkcGjG9OmwY47enaL\nJEmDyeDRjW22gRNPdJyHJEmDyeDRg7lzc1fLI48UXYkkScODwaMHJ54II0bA5d1eU1WSJPWHwaMH\nO+0E06c7zkOSpMFi8OhFczNcfTU880zRlUiSVP8MHr2YOzeHjt/+tuhKJEmqfwaPXhx8MOy7r90t\nkiQNBoNHLyJyd8vChZBS0dVIklTfDB590NwMDz0Et99edCWSJNU3g0cfzJgB48d7MTFJkgbK4NEH\no0fD7NmO85AkaaAMHn3U3Ax//CM89ljRlUiSVL8MHn30hjfkn1dcUWwdkiTVM4NHH02cCEcd5TgP\nSZIGwuDRD3PnwlVXwcaNRVciSVJ9Mnj0Q3MzPP00XH990ZVIklSfDB798IpXwJ57enaLJEmVMnj0\nQ9tVTBcs8CqmkiRVwuDRT3Pnwn33wd13F12JJEn1x+DRT8cfD9tua3eLJEmVMHj007bbwqxZBg9J\nkiph8KhAczMsXgxPPFF0JZIk1ReDRwVOOgk2b4Yrryy6EkmS6ovBowJ77AFTp9rdIklSfxk8KtTc\nnO/b8vzzRVciSVL9MHhUqLkZnnwSbrih6EokSaofBo8KNTXBpEl2t0iS1B8GjwqNGJEHmXq3WkmS\n+s7gMQDNzfkKpvfeW3QlkiTVB4PHAMyaBaNHw69/XXQlkiTVB4PHAIwfny+h7jgPSZL6xuAxQHPn\nwu9+B+vWFV2JJEm1z+AxQCedBJs2waJFRVciSVLtKzx4RMQXImJLp+muHtaf0cX6myNit2rW3Wbv\nveHQQ+1ukSSpL0YVXUDZHcBMIMrPe7seaAIOBJ56YUZKjw1Nab1rbob/+3/z/VtGjiyqCkmSal/h\nLR5lz6eUHk8pPVae+nLf147rFxY6II/zePxxuPnmIquQJKn21UrwOCAiHomIv0TEBRGxVy/rB3Br\nRPw1IhZFxLRqFNmdo4+GnXf2YmKSJPWmFoLHjcC7gdnAh4B9gOsjYrtu1n8U+CDwFuDNwEPAdRFx\nxNCX2rWRI2HOHMd5SJLUm8LHeKSUrurw9I6IuAl4AHgr8F9drL8cWN5h1o0RsR8wHzhjKGvtSXMz\n/PSn8OCD8NKXFlWFJEm1rfDg0VlKaW1ELAf278dmNwHT+7Li/PnzmTBhwlbzSqUSpVKpHy/3YrNn\nw6hR+SqmZ501oF1JklSYlpYWWlpatpq3du3aQdt/pJQGbWeDISLGAw8Cn08pfbeP2ywC1qWUTu1h\nnanAkiVLljB16tTBKbaTmTNhzBi4/PIh2b0kSYVobW2lqakJoCml1DqQfRU+xiMivhERx0XElPIg\n0cuATUBLeflXIuL8DuufExFvjIj9IuLlEfEt4HigTyFlKDU3w7XXwvr1RVciSVJtKjx4AHsCFwJ3\nAxcBjwPHpJRWl5dPBjqe5TIa+CZwG3AdcBgwM6V0XZXq7VZzMzz3HFxzTdGVSJJUmwof45FS6nFw\nRUrpPZ2efwP4xpAWVaEDDoADD8xnt7zxjUVXI0lS7amFFo9hZe7cHDxqbOiMJEk1weAxyJqb4dFH\noXVAQ28kSRqeDB6DbPp0mDDBi4lJktQVg8cg22YbOPFEg4ckSV0xeAyBuXPhlltyl4skSWpn8BgC\nJ54II0bkq5hKkqR2Bo8hsPPOMG2a3S2SJHVm8Bgizc1w9dXw7LNFVyJJUu0weAyR5mbYsAGuu67o\nSiRJqh0GjyHyspfBPvvY3SJJUkcGjyESkVs9FizwKqaSJLUxeAyh5mZ48EG4446iK5EkqTYYPIbQ\njBkwfrzdLZIktTF4DKExY+CEEwwekiS1MXgMseZm+MMf4PHHi65EkqTiGTyG2Jw5eXDpFVcUXYkk\nScUzeAyxiRPhqKPsbpEkCQweVTF3Llx1FWzcWHQlkiQVy+BRBc3NsG4d/M//FF2JJEnFMnhUweGH\nwx572N0iSZLBowq8iqkkSZnBo0qam+Evf4Hly4uuRJKk4hg8qmTmTNh2W/jVr4quRJKk4hg8qmTb\nbeHEE+GSS4quRJKk4hg8qqhUgptvhnvvLboSSZKKYfCoopNOyjeNu+iioiuRJKkYBo8qGjcOTj4Z\nWlo8u0WS1JgMHlVWKsFdd8HttxddiSRJ1WfwqLLXvx522snuFklSYzJ4VNno0XDqqTl42N0iSWo0\nBo8CzJsH998Pf/xj0ZVIklRdBo8CHHccTJ6cB5lKktRIDB4FGDkSTj8dLr4YNm8uuhpJkqqnouAR\nEZ+PiHFdzN82Ij4/8LKGv1IJVq6E664ruhJJkqqn0haPLwDju5g/rrxMvTjySNh3X89ukSQ1lkqD\nRwBdnZNxOPBE5eU0jog8yPTSS2HjxqKrkSSpOvoVPCJiTUQ8QQ4dyyPiiQ7TWuBq4OKhKHQ4KpVg\nzRq46qqiK5EkqTpG9XP9j5FbO/6T3KWytsOyjcCKlNIfBqm2Ye/QQ/PU0gJz5xZdjSRJQ69fwSOl\ndD5ARNwPLE4pPT8kVTWQUgm+/GVYvx62267oaiRJGlqVjvF4Cjik7UlEnBwR/y8ivhIRowentMYw\nbx5s2AALFxZdiSRJQ6/S4PG/gQMBImJf4GfABuA04OuDU1pj2HdfOOooLyYmSWoMlQaPA4Fby49P\nA36XUnob8G7gLf3ZUUR8ISK2dJru6mWb10bEkoh4NiKWR8QZlfwStaJUgiuugCefLLoSSZKG1kBO\np23bdhZwefnxQ8AuFezvDmAiMKk8vbrbF47YG1gIXEM+fffbwI8i4vUVvG5NeOtbYdMm+MUviq5E\nkqShVWnwuAX4bES8E5gB/Lo8fx9gVQX7ez6l9HhK6bHy1NO1QM4C7kspfSKldE9K6XvAz4H5Fbxu\nTdh9d3jta+1ukSQNf5UGj48BU4HvAl9OKd1bnn8qcEMF+zsgIh6JiL9ExAURsVcP6x4D/KbTvKuA\nYyt43ZpRKsG118KqSmKbJEl1oqLgkVK6LaV0WEppQkrpix0WfRzo73iLG8ljQ2YDHyK3mlwfEd2d\nXDqJF7eqrAJ2iIgx/XztmvHmN8OIEXDJJUVXIknS0BnQ3Wkjoiki3lGepqaUnk0pberPPlJKV6WU\nLk0p3ZFSuhqYA7wEeOtAaqs3O+8Ms2fb3SJJGt76e+VSACJiN/IptDOAtnMxdoyI3wLzUkqPV1pQ\nSmltRCwH9u9mlZXkgagdTQTWpZSe623/8+fPZ8KECVvNK5VKlEqlSsodVKUSvOMd8MADMGVK0dVI\nkhpRS0sLLZ2+Ba9du7abtfsvUurqXm+9bBTxM2Bf4F0ppWXleS8DzgfuTSlV/CkeEeOBB4HPp5S+\n28XyrwJvSCkd3mHehcCOKaU5Pex3KrBkyZIlTJ06tdLyhtTTT8Nuu8EXvgCf/GTR1UiSlLW2ttLU\n1ATQlFJqHci+Ku1qORH4cFvoAEgp3QV8BHhDf3YUEd+IiOMiYkpETAMuAzYBLeXlX4mI8zts8kNg\n34j4WkQcFBEfJg9qPbfC36VmjB+f79ly0UVFVyJJ0tCoNHiMIIeDzjZVsM89gQuBu4GLgMeBY1JK\nq8vLJwMvnOWSUloBnES+fsit5NNo35dS6nymS12aNw9uvRXuvrvoSiRJGnwVjfEArgW+HRGllNJf\nASJiD+A88oW9+qy3bpmU0nu6mHc90NSf16kXb3gD7LBDHmT6xS/2vr4kSfWk0haPs4EdgBXla2/8\nBbi/PO/vBqu4RjR2bD61tqUFKhh+I0lSTauoxSOl9FB5sOYs4ODy7GXDpbujaKUS/PjH0NoKTcOy\nXUeS1Kj61eIREa+LiLsiYoeUXZ1S+veU0r8DN0fEnRExe4hqbRivex3suquDTCVJw09/u1o+BvxH\nSmld5wUppbXA/8aulgEbNQpOOy0Hjy1biq5GkqTB09/gcThwZQ/LFwGvqLwctSmV4OGHYfHioiuR\nJGnw9Dd4TKTr02jbPA/sWnk5ajNtGuy1l5dQlyQNL/0NHo8Ah/aw/BXAo5WXozYjRuRrelxyCWzq\n191vJEmqXf0NHpcDX4qIsZ0XRMS2wBeBhYNRmHJ3y9/+BtdeW3QlkiQNjv4Gj38FdgKWR8QnIuLk\n8vRJ4J7ysi8PdpGN6ogj4MAD7W6RJA0f/QoeKaVVwDTgDuB/ke+rchnwlfK8V5fX0SCIyK0el10G\nzz5bdDWSJA1cv69cmlJ6oHwX2F2Ao4FjgF1SSnNSSvcPdoGNrlSCdevg8suLrkSSpIGr9JLppJTW\npJRuTindlFJaM5hFqd1BB8ErX2l3iyRpeKg4eKh6SiVYuBCeeqroSiRJGhiDRx04/fQ8xuOXvyy6\nEkmSBsbgUQde+lKYPt3uFklS/TN41IlSCRYtgtWri65EkqTKGTzqxGmnQUrw858XXYkkSZUzeNSJ\n3XaDmTPzHWslSapXBo86Mm8e/O538MgjRVciSVJlDB515JRTYJtt4OKLi65EkqTKGDzqyI47wpw5\nnt0iSapfBo86UyrBzTfDvfcWXYkkSf1n8Kgzzc2w3Xbws58VXYkkSf1n8Kgz48bBySfb3SJJqk8G\njzpUKsGdd8LttxddiSRJ/WPwqEMnnAAveYmtHpKk+mPwqEOjR8Opp+aLiaVUdDWSJPWdwaNOzZsH\n998PN91UdCWSJPWdwaNOzZgBkyfb3SJJqi8Gjzo1ciS89a35tNrNm4uuRpKkvjF41LFSCVauzPdv\nkSSpHhg86thRR8E++9jdIkmqHwaPOhaRB5leeils3Fh0NZIk9c7gUedKJVizBhYtKroSSZJ6Z/Co\nc4cdBi9/ud0tkqT6YPAYBkol+OUvYcOGoiuRJKlnBo9hYN48WL8eFiwouhJJknpm8BgG9tsPjjwy\nX0JdkqRaZvAYJkoluPxyePLJoiuRJKl7Bo9h4vTTYdMmuOyyoiuRJKl7Bo9hYvfd8/1bPLtFklTL\nai54RMSnImJLRJzbwzozyut0nDZHxG7VrLXWlEpwzTWwalXRlUiS1LWaCh4RcSTwAWBpH1ZPwAHA\npPI0OaX02BCWV/Pe8hYYMQJ+/vOiK5EkqWs1EzwiYjxwAXAm0Nchko+nlB5rm4auuvqw885wwgl2\nt0iSalfNBA/ge8CClNK1fVw/gFsj4q8RsSgipg1hbXWjVILFi+HBB4uuRJKkF6uJ4BER84AjgE/3\ncZNHgQ8CbwHeDDwEXBcRRwxNhfXj5JNh7Fiv6SFJqk2jii4gIvYEvgXMSilt6ss2KaXlwPIOs26M\niP2A+cAZPW07f/58JkyYsNW8UqlEqVTqV921avvtYe7c3N3yiU8UXY0kqd60tLTQ0qnPfu3atYO2\n/0gpDdrOKiog4mTgF8BmcvcJwEjy4NHNwJjUhyIj4uvA9JTS9G6WTwWWLFmyhKlTpw5K7bXqF7/I\nA02XLYODDy66GklSvWttbaWpqQmgKaXUOpB91UJXy2+Aw8hdLYeXp1vIA00P70voKDuC3AXT8ObM\ngR12sLtFklR7Cg8eKaX1KaW7Ok7AemB1SmkZQER8JSLOb9smIs6JiDdGxH4R8fKI+BZwPPDdYn6L\n2jJ2LJxySu5uKbhBS5KkrRQePLrR+eNyMrBXh+ejgW8CtwHXkVtMZqaUrqtGcfWgVILly+FPfyq6\nEkmS2hU+uLQrKaXXdXr+nk7PvwF8o6pF1ZmZM2GXXXKrxzAf0iJJqiO12uKhARo1Ck47LY/z2LKl\n6GokScoMHsNYqQQPPww33FB0JZIkZQaPYWz6dNhzTy+hLkmqHQaPYWzECJg3Dy65BJ5/vuhqJEky\neAx7pRI8/jhcc03RlUiSZPAY9l75SjjgALtbJEm1weAxzEXkVo/LLoNnny26GklSozN4NIBSCdat\ngyuuKLoSSVKjM3g0gIMPhiOOsLtFklQ8g0eDKJVgwQJ46qmiK5EkNTKDR4M4/fQ8xuOXvyy6EklS\nIzN4NIgpU2DatHwJdUmSimLwaCClElx1FaxeXXQlkqRGZfBoIKedlm8Yd+mlRVciSWpUBo8GMnEi\nzJoF555rq4ckqRgGjwbz7W/n0DF7NqxdW3Q1kqRGY/BoMAcfDFdfDX/5C5x0EqxfX3RFkqRGYvBo\nQEccAVdeCUuXwpve5KXUJUnVY/BoUEcfDQsXwu9/nwedbtxYdEWSpEZg8GhgM2bkm8dddRW84x2w\neXPRFUmShjuDR4M78US4+GL4xS/gfe/Lp9tKkjRUDB7iTW+Cn/wkT2efDSkVXZEkabgaVXQBqg1v\nexts2ADvfz9stx18/esQUXRVkqThxuChF5x5Zj699mMfg/Hj4QtfKLoiSdJwY/DQVs45J4ePz3wm\nt3z84z8WXZEkaTgxeOhF/umfcvj4+Mdz+DjrrKIrkiQNFwYPdelf/zWHjw9/GMaNgzPOKLoiSdJw\nYPBQlyLgvPNy+Hjve3P4OO20oquSJNU7g4e6FQE//GE+2+Vtb4Ntt4Xm5qKrkiTVM6/joR6NHAnn\nnw9z58Kpp8JvflN0RZKkembwUK9GjYKWFjj+eDj5ZFi8uOiKJEn1yuChPhkzBi69FI48EubMgVtu\nKboiSVI9Mnioz8aNgwUL4JBDYPZsuP32oiuSJNUbg4f6Zfvt4Yor4KUvhde/HpYvL7oiSVI9MXio\n317yEli0CHbaCWbOhBUriq5IklQvDB6qyK67wtVXw+jROXw88kjRFUmS6oHBQxXbYw+45hrYtAlm\nzYLHHy+6IklSrTN4aED23jtf22PNmjzmY82aoiuSJNUyg4cG7MADc/h46CF4wxvgqaeKrkiSVKsM\nHhoUhx6aB5wuW5avcrphQ9EVSZJqUc0Fj4j4VERsiYhze1nvtRGxJCKejYjlEeH9UwvW1ASXXw43\n3wxvfjM891zRFUmSak1NBY+IOBL4ALC0l/X2BhYC1wCHA98GfhQRrx/iEtWL6dPhV7+C666DefPy\nwFNJktrUTPCIiPHABcCZwJO9rH4WcF9K6RMppXtSSt8Dfg7MH+Iy1QczZ8LPfw4LF8K73w2bNxdd\nkSSpVtRM8AC+ByxIKV3bh3WPATrfJ/Uq4NhBr0oVaW6GCy+Eiy6CD30IUiq6IklSLRhVdAEAETEP\nOAJ4VR83mQSs6jRvFbBDRIxJKTm6oAacdloeZPrud+f7vHzrWxBRdFWSpCIVHjwiYk/gW8CslJIj\nAoaZM87I4ePDH4bx4+HLXy66IklSkQoPHkATsCvQGvHC9+GRwHERcTYwJqUXNdSvBCZ2mjcRWNdb\na8f8+fOZMGHCVvNKpRKlUqnS+tWLs86C9evh4x+H7baDf/qnoiuSJHWnpaWFlpaWreatXbt20PYf\nL/5Mr66I2A6Y0mn2j4FlwFdTSsu62OarwBtSSod3mHchsGNKaU43rzMVWLJkyRKmTp06WOWrH774\nRfjnf85dLuecU3Q1kqS+am1tpampCaAppdQ6kH0V3uKRUloP3NVxXkSsB1a3hY6I+AqwR0qp7Vod\nPwQ+EhFfA/4TmAmcCnQZOlQbPv/53PLxsY/lsR4f/CCMGVN0VZKkaqqls1o66twMMxnY64WFKa0A\nTgJmAbeST6N9X0qp85kuqiER8LWvwdln5xaPXXaBU0+F88/3BnOS1CgKb/HoSkrpdZ2ev6eLda4n\njw9RHYmA73wH3v9+WLAgT+8p/+see2y+3PrcufCyl3kGjCQNR7Xa4qFhLAJe8Qr4zGfgxhvh0Ufh\nRz+C3XaDL30p3/dlv/1yl8w118DGjUVXLEkaLAYPFW7iRHjve+Gyy2D1avj1r2H27Hz101mzYNdd\n4fTT4YIL4Ikniq5WkjQQBg/VlLFjYc4c+MEP4KGHoLUV/uEf4L774J3vzK0iM2bAv/0b3HNP0dVK\nkvrL4KGaFQGvfGU+G+bmm+GRR+D734cddoDPfQ4OPhgOPDAHk+uug+efL7piSVJvDB6qG7vvDh/4\nQB6Qunp1vgvua1+b7wlz/PG5NeTtb8/3h3myt9sMSpIKUZNntUi9GTeu/QyYLVtgyZL2s2QuvBBG\njYLXvAbe+Ma8zn77FV2xJAkMHhoGRoyAI4/M07/8Sx4bsnBhbhH55Cdh/nw45JD2oHLssTByZNFV\nS7UnJfjLX/LZZhF54PfEiTBpEuy8c/6/Jg1U4ZdMrxYvmd6Ynn4arr46t4QsXJgvVLbzznkA60kn\nweGHw777wujRRVda/1LKpz4/91yeOj7uy/Px4/Np1gcdBNtsU/Rv0xg2bYJbb4Xf/z5PixfDqs73\n/S4bOTKfYTZp0taBpKvHhpT6tHYtrFgBDzzw4p/33tvK2rWDc8l0g4caxubNcNNN7V0yd9yR548c\nCfvskz/wDjww/2x7PHny8LuQ2ZYtsHIl3H9/nlasgDVr+h4QultnsK63MmYMvPzlcMQRORi2TTvu\nODj7b2Tr1uXWjLaQceON+e7RY8fC0UfDq1+dp2OOyWF81ao8rVzZ8+Onn976dUaOzGOuegsokybB\nTjsZUqoAJrQHAAAPZ0lEQVQhpXw5gu6CxYoVOXi0GTMGpkyBvffOP7fZppXvf9/g0S8GD3W2cmU+\nJbdtWr48/7zvvhxSALbfPgeQzoHkwAPzN/RalFIefNsWLNrCRdvjBx7IYaHNrrvmb6hjxuQPmzFj\n2qf+Pq90m1Gj8oDg226DpUvzdOutcOed7bVOmbJ1GDniiPym6IdW9x55JAeMthaNpUtz8Nxll/aQ\nMX06TJ06sFa/9evbw0hvYaW7kNJVOHnJS/J4ru22yz/bps7PRzlogJTgscd6Dhbr17evP25ce6jo\n6uduu239f2swbxJn8JA62bgxf0B3DiT33JP/Y7fZY4+uW0n23nvox5CsW9d9sFixYus39wkTcovO\nPvvk2toe77NPfpOp1QAFuStg+fIcQtrCyNKl7f8O22+fu2c6BpJDD81vqo1myxZYtqw9ZPz+9/lv\nAeCAA3LAaAsbBx5YXEtex5DSMZB0FVY6flD2ZPTonoPJQJ6PHZs/gCPyz86P254P9fHcsiVf5bm7\nUPHAA/Dss+3r77BDz8Fi5537V7PBowIGDw2GJ5/cOoi0PV6+vP0//ejRsP/+Lw4kBx2Uv2n2xYYN\n+Y2ku3CxZk37uttu232w2Hvv/K1xuFm5sj2EtAWSe+7Jb84jRuTj3bl1ZNKk4dVt9uyzcMst7SHj\nhhvy38XIkbkFo2OLxsSJRVdbmeefz/8XOk7r13f/vKdl3T3ftGnw6u0ulHT3vK/LNm3KrVcduzN3\n2qnnYDHYXZMGjwoYPDSUtmyBhx/uupXkwQdzMyjkN4uOgWS//XK/audg0XGA3zbb5DeT7sLFrrsO\nrw/USj3zTB630zGMLF0KTz2Vl++664vDSD0NZF29OoeLtvEZN9+cP4jGj4dp09pDxtFH52/s6ptN\nm/LfTnfB5Nln8//fLVvaf7ZN1Xo+ciTstdfW4WL77at7nAweFTB4qCjPPAP33tt1KHnyyfyNZs89\nX9xS0fZ48mRP/61USjnQde6qaeuCGD1664GsBx+cm9a32SZPo0b1/rjt+WCONUkpB9CO4zPuuisv\n23339taMV78aDjvMMQ4aeoMZPPxzlYbYttvmD4fDDtt6fkq5aXz77evnW3e9iWgPcKec0j6/q4Gs\nF1649aDb/hoxou9hpavg0vZ406bchfLoo3m/L395vhjepz+dg8aUKbZwqb4ZPKSCROSuF1XfjjvC\nccflqc3zz+fusk2b2qfnn6/u42eeyYH0jDNyyDj2WP9GNPwYPCSJ3Oqw995FVyENf54BL0mSqsbg\nIUmSqsbgIUmSqsbgIUmSqsbgIUmSqsbgIUmSqsbgIUmSqsbgIUmSqsbgIUmSqsbgIUmSqsbgIUmS\nqsbgIUmSqsbgIUmSqsbgIUmSqsbgIUmSqsbgIUmSqsbgIUmSqsbgIUmSqsbgIUmSqsbgIUmSqsbg\nIUmSqsbgIUmSqsbgIUmSqsbgIUmSqqbw4BERH4qIpRGxtjzdEBEn9rD+jIjY0mnaHBG7VbPuetbS\n0lJ0CTXB49DOY5F5HNp5LDKPw+ArPHgADwGfBKYCTcC1wC8j4pAetknAAcCk8jQ5pfTYUBc6XPgf\nKfM4tPNYZB6Hdh6LzOMw+EYVXUBK6dedZn02Is4CjgGW9bDp4ymldUNXmSRJGmy10OLxgogYERHz\ngHHAH3paFbg1Iv4aEYsiYlp1KpQkSQNReIsHQEQcSg4aY4GngFNSSnd3s/qjwAeBW4AxwPuB6yLi\nqJTSrdWoV5IkVaYmggdwN3A4MAE4FfhJRBzXVfhIKS0HlneYdWNE7AfMB87o4TXGAixb1lPvTWNY\nu3Ytra2tRZdROI9DO49F5nFo57HIPA5Zh8/OsQPdV6SUBrqPQRcRVwP3ppTO6uP6Xwemp5Sm97DO\n24D/HqQSJUlqRG9PKV04kB3USotHZyPI3Sh9dQS5C6YnVwFvB1YAz1ZWliRJDWkssDf5s3RACg8e\nEfEV4ArgQWB7cjiYAZxQXv6/gN1TSmeUn58D3A/cST4Q7weOB17f0+uklFYDA0ppkiQ1sBsGYyeF\nBw9gN+B8YDKwFrgNOCGldG15+SRgrw7rjwa+CewObCivPzOldH3VKpYkSRWpyTEekiRpeKqp63hI\nkqThzeAhSZKqpiGCR0R8JCLuj4hnIuLGiDiy6JqqLSI+HRE3RcS6iFgVEZdFxIFF11W0iPhU+UaD\n5xZdS7VFxO4R8dOI+FtEbCjfrHFq0XVVW/mKyV+KiPvKx+HeiPhs0XUNtYh4TUT8KiIeKf8feGMX\n6/xL+QrRGyLi6ojYv4hah1pPxyIiRkXE1yLitoh4urzO+RExuciah0Jf/iY6rPvD8jof7e/rDPvg\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10f964588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from mlxtend.data import iris_data\n",
    "from mlxtend.plotting import plot_decision_regions\n",
    "from mlxtend.classifier import Adaline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Loading Data\n",
    "\n",
    "X, y = iris_data()\n",
    "X = X[:, [0, 3]] # sepal length and petal width\n",
    "X = X[0:100] # class 0 and class 1\n",
    "y = y[0:100] # class 0 and class 1\n",
    "\n",
    "# standardize\n",
    "X[:,0] = (X[:,0] - X[:,0].mean()) / X[:,0].std()\n",
    "X[:,1] = (X[:,1] - X[:,1].mean()) / X[:,1].std()\n",
    "\n",
    "\n",
    "ada = Adaline(epochs=15, \n",
    "              eta=0.02, \n",
    "              minibatches=5, # for SGD learning w. minibatch size 20\n",
    "              random_seed=1,\n",
    "              print_progress=3)\n",
    "\n",
    "ada.fit(X, y)\n",
    "plot_decision_regions(X, y, clf=ada)\n",
    "plt.title('Adaline - Stochastic Gradient Descent')\n",
    "plt.show()\n",
    "\n",
    "plt.plot(range(len(ada.cost_)), ada.cost_)\n",
    "plt.xlabel('Iterations')\n",
    "plt.ylabel('Cost')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# API"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "## Adaline\n",
      "\n",
      "*Adaline(eta=0.01, epochs=50, minibatches=None, random_seed=None, print_progress=0)*\n",
      "\n",
      "ADAptive LInear NEuron classifier.\n",
      "\n",
      "Note that this implementation of Adaline expects binary class labels\n",
      "in {0, 1}.\n",
      "\n",
      "**Parameters**\n",
      "\n",
      "- `eta` : float (default: 0.01)\n",
      "\n",
      "    solver rate (between 0.0 and 1.0)\n",
      "\n",
      "- `epochs` : int (default: 50)\n",
      "\n",
      "    Passes over the training dataset.\n",
      "    Prior to each epoch, the dataset is shuffled\n",
      "    if `minibatches > 1` to prevent cycles in stochastic gradient descent.\n",
      "\n",
      "- `minibatches` : int (default: None)\n",
      "\n",
      "    The number of minibatches for gradient-based optimization.\n",
      "    If None: Normal Equations (closed-form solution)\n",
      "    If 1: Gradient Descent learning\n",
      "    If len(y): Stochastic Gradient Descent (SGD) online learning\n",
      "    If 1 < minibatches < len(y): SGD Minibatch learning\n",
      "\n",
      "- `random_seed` : int (default: None)\n",
      "\n",
      "    Set random state for shuffling and initializing the weights.\n",
      "\n",
      "- `print_progress` : int (default: 0)\n",
      "\n",
      "    Prints progress in fitting to stderr if not solver='normal equation'\n",
      "    0: No output\n",
      "    1: Epochs elapsed and cost\n",
      "    2: 1 plus time elapsed\n",
      "    3: 2 plus estimated time until completion\n",
      "\n",
      "**Attributes**\n",
      "\n",
      "- `w_` : 2d-array, shape={n_features, 1}\n",
      "\n",
      "    Model weights after fitting.\n",
      "\n",
      "- `b_` : 1d-array, shape={1,}\n",
      "\n",
      "    Bias unit after fitting.\n",
      "\n",
      "- `cost_` : list\n",
      "\n",
      "    Sum of squared errors after each epoch.\n",
      "\n",
      "### Methods\n",
      "\n",
      "<hr>\n",
      "\n",
      "*fit(X, y, init_params=True)*\n",
      "\n",
      "Learn model from training data.\n",
      "\n",
      "**Parameters**\n",
      "\n",
      "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n",
      "\n",
      "    Training vectors, where n_samples is the number of samples and\n",
      "    n_features is the number of features.\n",
      "\n",
      "- `y` : array-like, shape = [n_samples]\n",
      "\n",
      "    Target values.\n",
      "\n",
      "- `init_params` : bool (default: True)\n",
      "\n",
      "    Re-initializes model parameters prior to fitting.\n",
      "    Set False to continue training with weights from\n",
      "    a previous model fitting.\n",
      "\n",
      "**Returns**\n",
      "\n",
      "- `self` : object\n",
      "\n",
      "\n",
      "<hr>\n",
      "\n",
      "*predict(X)*\n",
      "\n",
      "Predict targets from X.\n",
      "\n",
      "**Parameters**\n",
      "\n",
      "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n",
      "\n",
      "    Training vectors, where n_samples is the number of samples and\n",
      "    n_features is the number of features.\n",
      "\n",
      "**Returns**\n",
      "\n",
      "- `target_values` : array-like, shape = [n_samples]\n",
      "\n",
      "    Predicted target values.\n",
      "\n",
      "<hr>\n",
      "\n",
      "*score(X, y)*\n",
      "\n",
      "Compute the prediction accuracy\n",
      "\n",
      "**Parameters**\n",
      "\n",
      "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n",
      "\n",
      "    Training vectors, where n_samples is the number of samples and\n",
      "    n_features is the number of features.\n",
      "\n",
      "- `y` : array-like, shape = [n_samples]\n",
      "\n",
      "    Target values (true class labels).\n",
      "\n",
      "**Returns**\n",
      "\n",
      "- `acc` : float\n",
      "\n",
      "    The prediction accuracy as a float\n",
      "    between 0.0 and 1.0 (perfect score).\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "with open('../../api_modules/mlxtend.classifier/Adaline.md', 'r') as f:\n",
    "    print(f.read())"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
